perm filename CKL.MAC[CH2,ALS] blob
sn#288427 filedate 1977-06-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00042 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00008 00002 TITLE CKL CHECKERS LEARNING ROUTINES 12/8/70
C00010 00003 MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER
C00013 00004 MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN BDOUT PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D BOUT SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS
C00015 00005 TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1
C00018 00006 LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4
C00023 00007 BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1
C00027 00008 LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2
C00031 00009 TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2
C00036 00010 NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B
C00040 00011 LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2
C00042 00012 ALS1 ALS1B ALS1A ALS2 ALS3
C00045 00013 ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8
C00047 00014 LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3
C00053 00015 BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE
C00057 00016 NOMOV NOMOVE ENDERR LERR NOSTO STOP STOMP STTEST STBIT
C00060 00017 LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L14 L14N
C00066 00018 L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
C00070 00019 TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN
C00073 00020 C2P C3P C4P C5 C2N C3N C4N C6
C00075 00021 CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
C00076 00022 LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC
C00079 00023 TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL
C00082 00024 FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT
C00085 00025 LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20
C00090 00026 LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS
C00091 00027 EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG
C00095 00028 DSAVE RSAVE RFILL
C00098 00029 DFILL DFILL2 DSKERR DATA RDATA
C00101 00030 MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF
C00104 00031 SAVMOV SAV0
C00106 00032 MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX
C00108 00033 INSERT INS2 INS1A INS3A INS3B INS4B INS4C INS4D INS4E INS4F INS5 INSX INS6
C00113 00034 INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR
C00116 00035 ZEROIT DMPFIL DMPFI1 DMPFI2 DMPFI3 DSKBKD DSKBKM BKMIN BKMIN2 INPA BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN FILEI2 INBITS
C00119 00036 BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4
C00122 00037 FIXX NOFIND FIXK FIXK2
C00125 00038 RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13
C00129 00039 FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3
C00132 00040 SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
C00139 00041 SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE TABLST TAB2 TAB3 TAB3A TAB3B TAB4 TAB4B TAB5 TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB25 TAB26 TAB27 TAB31 TAB32 TAB33 TAB34
C00152 00042 LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES
C00155 ENDMK
C⊗;
TITLE CKL CHECKERS LEARNING ROUTINES 12/8/70
;WITH FIX ROUTINE ADDED
;REVISED TO REDUCE MEMORY AND DISK SIZES
INTERN BEGINL,CMOVE,HEADFL,LBYT,LFLAG,NOSTO
INTERN LXF,LZERO,TRNKNO,DIVIDE,SYM,LC,INPSIZ
INTERN LZER2,LZER3
INTERN RFILL,DFILL,RSAVE,DSAVE,EVAL11,LOADTA
INTERN WHOWON,LCONTS,LCONTZ,ZL,BEGL3
INTERN BOOKA,BOOKP,BOOKK,BOOKM,BOOKI,INPSIZ,INPA,INPP,INPK,LABEL
INTERN TABFIX,TABLST,PAR,XPAR
EXTERN LPTBUF,NUM2
EXTERN FINDFI,FINDX1,X4NORM,PCCNT,PHASE,PHASEV,X4ALL,X4TAB
EXTERN CRIP,REVERA,REVERP,REVERK,WHERE
EXTERN COLOR,CFLAG,BITTAB
EXTERN LEGAL,MAGIN,MAGTAP,TPUNIT,OUTIN,MGIBUF,MGOBUF
EXTERN NOYES,NUM3,NUMOUT,OCT2,OCTOUT,RJ2,RJ4,RJOUT,SCAN,TYI
EXTERN TERPRI,EOL,NEWLIN,PRINT,S,SI
EXTERN LOSE,LPTFIX,DWFLAG
EXTERN PLA,PLP,PLK,PLRF,PLLF,PLRB,PLLB,PUP,ZZ,PLY
EXTERN PRNAME,LPFLAG,BEGIN,COMEND
EXTERN TA,TP,TK,TYO,LASCAR,ERR,SIDE,OJ
EXTERN TLIST,EEB,EEB2,USEBOK
; REGISTER ASSIGNMENTS
;ASSIGNMENT USAGE
Z=0
X1=1 ; INDEX MAIN
U1=2
X2=3 ; INDEX PATH
U2=4
X3=5 ; INDEX PLAUS
U3=6
X4=7 ; INDEX TWIG
U4=10
X5=11 ; PASS COLOR
U5=12
Q=13
A=14 ; ACTIVE
P=15 ; PASSIVE
K=16 ; KINGS
PDP=17 ; PUSHJ
;MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER
MA: BLOCK 300
MP: BLOCK 300
MK: BLOCK 300
ME: BLOCK 300
MWL: BLOCK 300 ;WHOWON INDICATORS
OPDEF TTYUUO [51B8]
BEST: Z ;BEST INDEX VALUE
X1S: Z
X2S: Z
SAVX2: Z
U2SS: Z
WHOWON: Z
WINLOS: Z ;COUNT OF DISTANCE TO WIN OR LOSS
BKMOVE: Z ;BOOK MOVE SAVE
X4CNT: Z
X4MOVE: Z
HIGH: BLOCK 4
LOW: BLOCK 4
EQUAL: BLOCK 4
THIGH: Z
TLOW: Z
TEQUAL: Z
HEADFL: -1
U4S: Z ;TEMPORARY STORAGE
KEAR: Z ;FLAG FOR KEAR LEARNING DATA
BOLFLG: Z ;FLAG FOR BOLAND LEARNING DATA
LXF: Z ;FLAG FOR LEGAL BOOK MOVE
TRNKNO: -1 ;TRUNK COUNTER
LBYT: Z ;BYTE POINTER
LFLAG: Z
CMOVE: Z
COUNT: Z
LPOINT: Z ;POINTER FOR VARIATIONS
STIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
MOVEM U1,TIME
POPJ PDP,
LTIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
SUB U1,TIME
ADDM U1,LABEL
LTIME0: ADDM U1,TIME
MOVEI U2,↑D1000
IDIVM U1,U2
MOVE U1,U2
PUSHJ PDP,RJOUT1
POPJ PDP,
RTIME: SETZ U1,
CALL U1,[SIXBIT /RUNTIME/]
SUB U1,TIME
JRST LTIME0
TIME: Z
HEADER: ASCIZ /
TIME PHASE3 PHASE2 PHASE1 PHASE0 # ALL
% %E % %E % %E % %E MOVES % %E
/
;MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN BDOUT PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D BOUT SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS
;THE FOLLOWING DEFINITIONS ARE NEEDED TO DEFINE GLOBELS.
;THIS SECTION TAKES THE PLACE OF PD.MAC
INTERN TRESET,TREE,TELPAR,SIG,SETW,SETPAR,SETB,FIND,MOVIN
INTERN ACCEPT,BDOUT,PLAYBS,PC,PB,TELLC,LTREE,GO,DEBUG
INTERN REVERS,PW,CTOTAL,LEGM,W,D,BOUT,MESS,IA,FINDM
INTERN CDIFF,DIFF,TOTAL,CRFST,FSTCR,LPTREE,RUNT,CRUNT,CTELLC,CSFLAG
INTERN MOVOUT,MOVES,IP,IK,TEST,SUM,RECIN
INTERN MOP,MOVX,EXIT1,DATA
INTERN DSTREE,TREFIX,BK
EXTERN NOTICE
DSTREE:
TREFIX:
BK:
MOVOUT:
IP:
IK:
CDIFF:
TEST:
CRFST:
LPTREE:
CRUNT:
CTELLC:
TELPAR:
SIG:
SETW:
SETPAR:
SETB:
FIND:
MOVIN:
BDOUT:
PLAY:
PLAYBS:
PC:
PB:
GO:
DEBUG:
REVERS:
PW:
CTOTAL:
W:
D:
BOUT:
SUM:
RECIN:
EXIT1:
JRST NOTICE
IA:
FINDM:
DIFF:
TOTAL:
FSTCR:
RUNT:
CSFLAG:
TRESET:
TREE:
MOP:
TELLC:
MOVX:
LTREE: Z
MESS: ASCIZ /
/
;TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1
;FIRST LEVEL TABLE EVALUATION MACROS AND DATA
DEFINE MACZ (SC) <;TABLE EVALUATION SCORE
MOVE Z,SIGZ1'SC(A)
CAMN K,A
JRST .+7 ;DO NOT SCORE BOOK MOVE
CAMGE Z,SIGZ1'SC(K)
AOS HIGH1'SC(P)
CAMN Z,SIGZ1'SC(K)
AOS EQU1'SC(P)
CAMLE Z,SIGZ1'SC(K)
AOS LOW1'SC(P)>
TAB1E: MACZ 1
MACZ 2
MACZ 3
MACZ 4
MACZ 5
MACZ 6
POPJ PDP,
SIGZ11: BLOCK 20
SIGZ12: BLOCK 20
SIGZ13: BLOCK 20
SIGZ14: BLOCK 20
SIGZ15: BLOCK 20
SIGZ16: BLOCK 20
HIGH11: BLOCK 4
HIGH12: BLOCK 4
HIGH13: BLOCK 4
HIGH14: BLOCK 4
HIGH15: BLOCK 4
HIGH16: BLOCK 4
EQU11: BLOCK 4
EQU12: BLOCK 4
EQU13: BLOCK 4
EQU14: BLOCK 4
EQU15: BLOCK 4
EQU16: BLOCK 4
LOW11: BLOCK 4
LOW12: BLOCK 4
LOW13: BLOCK 4
LOW14: BLOCK 4
LOW15: BLOCK 4
LOW16: BLOCK 4
DEFINE MACP (SC) <;PRINT MACRO
MOVE X2,HIGH1'SC(P)
ADD X2,LOW1'SC(P)
ADD X2,EQU1'SC(P)
MOVEM X2,X2S
MOVE X3,LOW1'SC(P)
IMULI X3,↑D100
IDIV X3,X2
MOVE U1,X3
PUSHJ PDP,RJOUT3
MOVE X3,HIGH1'SC(P)
IMULI X3,↑D100
MOVE X2,X2S
IDIV X3,X2
MOVE U1,X3
SETZM HIGH1'SC(P)
SETZM EQU1'SC(P)
SETZM LOW1'SC(P)
PUSHJ PDP,RJOUT1>
TAB1P: PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TABLE L11H L12H L13H L14H L15H L16H
/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVEI P,3
TAB1P1: MOVEI U1,[ASCIZ /PHASE/]
PUSHJ PDP,PRINT
MOVE U1,P
PUSHJ PDP,NUMOUT
MACP 1
MACP 2
MACP 3
MACP 4
MACP 5
MACP 6
PUSHJ PDP,TERPRI
SOJGE P,TAB1P1
PUSHJ PDP,TERPRI
POPJ PDP,
;LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4
LOADTA: PUSHJ PDP,DFILL
BEGINL: PUSHJ PDP,TERPRI
SETOM TRNKNO
SETOM HEADFL
MOVEI U1,1
MOVEM U1,SI
SETOM LCONTF#
MOVEI U1,[ASCIZ /DEPTH (0 1 2 OR 3)?:/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .-4
CAIG U1,3
SKIPGE U1
JRST .-7
MOVEM U1,LDEPTH
ADDI U1,3 ;ALLOW 3 MORE
MOVEM U1,KDEPTH
SETZM LFLAG6
MOVEI U1,[ASCIZ /WANT LINEAR DATA? :/]
PUSHJ PDP,PRINT
SETZM LFLAG1
PUSHJ PDP,NOYES
JRST SSD
SETOM LFLAG1
MOVEI U1,[ASCIZ / REPORT TERMS? :/]
PUSHJ PDP,PRINT
SETOM LFLAG5
PUSHJ PDP,NOYES
SETZM LFLAG5
SSD: MOVEI U1,[ASCIZ /CHANGE WEIGHTS?:/]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST BEGL2
MOVEI U1,[ASCIZ /LINEARIZE FIRST LEVEL ? :/]
PUSHJ PDP,PRINT
SETZM LFLAG2
PUSHJ PDP,NOYES
JRST SSD1
SETOM LFLAG2
MOVEI U1,[ASCIZ /CR OR TYPE WEIGHT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGHT
MOVNS U1
HRRM U1,L9A
JRST .+6
MOVEI U1,[ASCIZ / WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGHT
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SSD1: MOVEI U1,[ASCIZ /SYM SMOOTH FIRST LEVEL :/]
PUSHJ PDP,PRINT
SETZM LFLAG7
PUSHJ PDP,NOYES
JRST SSD2
SETOM LFLAG7
MOVEI U1,[ASCIZ /TYPE FIRST SHIFT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGH1
MOVNS U1
HRRM U1,L10B
JRST .+6
MOVEI U1,[ASCIZ /SYM WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGH1
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SSD2: MOVEI U1,[ASCIZ /SYM SMOOTH SECOND LEVEL :/]
PUSHJ PDP,PRINT
SETZM LFLAG8
PUSHJ PDP,NOYES
JRST SSD3
SETOM LFLAG8
MOVEI U1,[ASCIZ /TYPE SECOND SHIFT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGH2
MOVNS U1
HRRM U1,AC3
JRST .+6
MOVEI U1,[ASCIZ /SYM WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGH2
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SSD3: MOVEI U1,[ASCIZ /SYM SMOOTH THIRD LEVEL :/]
PUSHJ PDP,PRINT
SETZM LFLAG9
PUSHJ PDP,NOYES
JRST BEGL2
SETOM LFLAG9
MOVEI U1,[ASCIZ /TYPE THIRD SHIFT :/]
PUSHJ PDP,PRINT
PUSHJ PDP,SCAN
PUSHJ PDP,EOL
JRST .+5
MOVEM U1,WEIGH3
MOVNS U1
HRRM U1,L34B
JRST BEGL2
MOVEI U1,[ASCIZ /SYM WEIGHT IS /]
PUSHJ PDP,PRINT
MOVE U1,WEIGH3
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
BEGL2: SETZM PRNVAR
SETZM DSKTAP
SETZM MGIBUF
BEGL4: MOVEI U1,[ASCIZ /TYPE B, K, OR L :/]
PUSHJ PDP,PRINT
PUSHJ PDP,TYI
CAIE U1,12
CAIN U1,15
JRST .-3
CAIN U1,"B"
JRST BEGLB
SETZM BOLFLG ;NOT BOLAND
CAIN U1,"K"
JRST BEGLK
CAIN U1,"L"
JRST BEGLL
JRST BEGL3
;BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1
BEGLB: MOVE U1,[SIXBIT /BOLAND/]
MOVEM U1,DATAG
SETOM BOLFLG ;SET FLAG
MOVEI U1,[ASCIZ /BOLAND WILL BE USED/]
JRST .+10
BEGLK: MOVE U1,[SIXBIT /KEARS/]
MOVEM U1,DATAG
MOVEI U1,[ASCIZ /KEARS WILL BE USED/]
JRST .+4
BEGLL: MOVE U1,[SIXBIT /LEES/]
MOVEM U1,DATAG
MOVEI U1,[ASCIZ /LEES WILL BE USED/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TYI
CAIE U1,15
JRST .-2
BEGL3: PUSHJ PDP,DSKINI
JRST BEGL4
GETGO: MOVEI Z,777777
MOVEM Z,CFLAG
SETZM TRUNKF
MOVEI U1,[ASCIZ / TRUNK NAMES? : /]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST .+2
SETOM TRUNKF
SETZM HIGH
SETZM LOW
SETZM EQUAL
SETZM THIGH
SETZM TLOW
SETZM TEQUAL
SETZM HEADFL
SOS HEADFL
SETZM COUNT ;INITIALIZE FOR LEARNING
PUSHJ PDP,STIME
;ASK TELETYPE WHERE TO START--IF NOT AT FRONT, THEN
;RESET TRNKNO. SKIP OVER TRNKNO NUMBER OF TRUNKS NOW.
MOVEI U1,[ASCIZ / TRUNK NUMBER? : /]
PUSHJ PDP,PRINT
MOVEI U1,1
PUSHJ PDP,SCAN ;GOBBLE UP CR
PUSHJ PDP,EOL ;SCAN CHAR.
JRST BEGIN3 ;CR
SOS U2,U1 ;NUMBER
MOVEM U1,TRNKNO ;STARTING TRUNK NO.
SETZM KEAR ;TURN OFF KEAR LEARNING FLAG
LB1: PUSHJ PDP,NEWLIN ;FIRST CHAR. OF CARD IMAGE IN U1
SKIP ;EOF
CAIN U1,"<" ;LEES OR TESCHELEIT LEARNING DATA?
SETZM KEAR ;YES, SO SET FLAG TO 0
CAIN U1,"!" ;KEAR LEARNING DATA?
AOS KEAR ;YES, SO SET FLAG
CAIN U1,"&"
JRST .+3
CAIE U1,"#" ;A "#"?
JRST LB1 ;NO
SOJGE U2,LB1 ;YES, BUT IS IT PROPER TRUNK CARD?
PUSHJ PDP,COMM1
SETZM X2 ;YES
SETOM LRNJMP ;TO SKIP DATA UPDATE FIRST TIME
JRST LTR
COMM2: SOJG U2,COMM+1
MOVEI X1,15
PUSHJ PDP,TYO
JRST COMM3
COMM: MOVEI U2,26
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST ENDERR ;EOF NOT EXPECTED HERE
MOVE X1,U1
PUSHJ PDP,TYO ;PRINT THE CHAR.
CAIE U1,15 ;<CR>?
JRST COMM2 ;NO
COMM3: MOVEI X1,12 ;YES, SO ...
PUSHJ PDP,TYO ;PRINT LINE-FEED
AOSE HEADFL
POPJ PDP,
COMM1: PUSHJ PDP,TERPRI
MOVEI U1,HEADER
PUSHJ PDP,PRINT
POPJ PDP, ;AND RETURN
;LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2
LFSTRT: PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST BEGIN ;EOF FOUND
JRST BEGIN2+2 ;U1 HAS FIRST CHAR. FOLLOWING LINE FEED
BEGIN3: PUSHJ PDP,TERPRI
TTYUUO 11,0 ;CLEAR TTY BUFFER
SETOM LRNJMP ;TO SKIP DATA UPDATE FIRST TIME
BEGIN2:
BEGIN4: PUSHJ PDP,NEWLIN ;FIRST CHAR. OF NEW CARD IN U1
JRST BEGIN ;EOF
CAIN U1,"!" ;"!" IS FIRST CHAR. OF KEAR DATA
AOSA KEAR ;KEAR NOT = 0 IFF KEAR DATA BEING PROCESSED
SKIPA
JRST .+10
CAIN U1,"#" ;A TRUNK CARD?
JRST LTR ;YES
CAIN U1,"&" ;TEST FOR BOLAND HEADER
JRST LTR
CAIE U1,"<" ;COMMENT CARD?
JRST .+4 ;NO
SETZM KEAR ;TURN OFF KEAR LEARNING FLAG
PUSHJ PDP,COMM ;YES, SO PRINT COMMENT
JRST BEGIN4 ;AND GET NEXT CARD
CAIN U1,">" ;END OF DATA?
JRST LSTOP ;YES
CAIE U1,14 ;FORM FEED?
JRST .+4 ;NO
PUSHJ PDP,MAGIN ;YES, SO GET NEXT CHARACTER & TRY AGAIN
HALT ;EOF FOUND
JRST BEGIN4+2
CAIE U1," " ;COLUMN 1 A BLANK?
JRST LMOVE+2 ;NO, SO MUST BE A MOVE CARD
JRST LBRNCH ;MUST BE VARIATION CARD
LTR: SETZM WHOWON ;TREAT GAME AS A DRAW TILL WE KNOW BETTER
MOVEI U1,"TK"
SKIPN KEAR
SETZ U1,
MOVEM U1,LPOINT ;A TRUNK CARD HAS BEEN FOUND
LTR1: AOS U1,TRNKNO ;ADD 1 TO TRUNK CARD COUNTER
JUMPE U1,LCONT ;1ST TIME THRU. NO DATA TO REPORT YET
SKIPE BOLFLG
TRNN U1,7
JRST .+2
JRST TTYUU
PUSHJ PDP,NUM3
MOVEI U1,[ASCIZ /. /]
PUSHJ PDP,PRINT
MOVEI P,3
PUSHJ PDP,LTIME ;TIME FOR THIS TRUNK
SETZM LTRSAV#
LTR2: MOVE A,PHASES(P)
MOVE Z,LOW(P)
ADDM Z,LABEL+2(A)
ADDM Z,TLOW
MOVE U2,LOW(P)
MOVE Z,EQUAL(P)
ADDM Z,LABEL+3(A)
ADDM Z,TEQUAL
ADD U2,EQUAL(P)
MOVE Z,HIGH(P)
ADDM Z,LABEL+4(A)
ADDM Z,THIGH
ADD U2,HIGH(P)
ADDM U2,LTRSAV
MOVE U1,EQUAL(P)
ASH U1,-1
ADD U1,LOW(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3 ;%L
SETZM LOW(P)
SETZM HIGH(P)
MOVE U1,EQUAL(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1 ;%E
SETZM EQUAL(P)
SOJGE P,LTR2
MOVE U1,LTRSAV
ADDM U1,LABELD+1
PUSHJ PDP,RJOUT3
MOVE U2,THIGH
ADD U2,TEQUAL
ADD U2,TLOW
MOVE U1,TEQUAL
ASH U1,-1
ADD U1,TLOW
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3 ;%TL
MOVE U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1 ;%TE
PUSHJ PDP,TERPRI
SKIPE RFLAG
PUSHJ PDP,TAB1P ;ON PAGE 5
UPTAB: SETZM THIGH
SETZM TLOW
SETZM TEQUAL
PUSHJ PDP,LINEAR
UPTAB2: MOVE U1,TRNKNO
TRNE U1,3
JRST TTYUU
TRNN U1,777
JRST .+3
PUSHJ PDP,DIVIDT
PUSHJ PDP,DSAVE
JRST TTYUU
;TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2
TTYUU: TTYUUO 2,U2
JRST LCONT
PUSH PDP,[EXP TTYUU]
CAIE U2,"R"
JRST .+3
SOS RFLAG#
POPJ PDP,
CAIE U2,"F"
JRST .+3
SETOM LFLAGT#
POPJ PDP,
CAIN U2,"T"
JRST TOTALS
;EXTRA COMMANDS GO IN HERE
POP PDP,
JRST COMEND+5
LCONTS: SKIPE LCONTF
JRST LCONT
LCONTZ: SETZM MGIBUF
SETOM LCONTF
SETOM TRNKNO
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,DSKINI
JRST BEGIN3 ;EXTRA INSTRUCTION NEEDED
JRST BEGIN3
LLSTOP: AOS U1,TRNKNO
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / IS THE NEXT TRUNK TO READ/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /TYPE SAVE TO SAVE/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST BEGIN
LSTOP: PUSHJ PDP,MAGIN ;GET NEXT CHAR. TO PRINT
JRST .+4 ;NO MORE CHARACTERS, SO UPDATE EVAL TABLES
MOVE X1,U1 ;PUT CHAR. IN X1 FOR TYO
PUSHJ PDP,TYO ;PRINT CHAR.
JRST LSTOP ;DO IT AGAIN
SETZM COUNT
JRST UPTAB
LCONT: SKIPE BOLFLG
JRST BOLAND
SKIPE TRUNKF
PUSHJ PDP,COMM
MOVSI A,377360 ;LEARN SOME MORE FROM STARTING BOARD
MOVEM A,TA ;GET INITIAL BOARD FOR THIS TRUNK
MOVEI P,17377
MOVEM P,TP
SETZB X2,TK
SETZM COLOR
SETOM X4VAR ;TO COUNT VARIATION BOARDS
JRST BEGIN2 ;GO GET MOVES NOW
LMOVE: PUSHJ PDP,MAGIN ;INPUT CHARACTERS FOR BKOK MOVE
JRST ENDERR ;EOF FOUND, NOT EXPECTED HERE
CAIN U1,12 ;A LINE FEED?
JRST LFSTRT ;YES
CAIE U1,15 ;IS IT A CR
CAIN U1," " ;A SPACE?
JRST LMOVE ;YES, SO TRY AGAIN
SKIPE LRNJMP ;TEST IF JUMP
JRST LMOVE1 ;LAST MOVE WAS A JUMP
UPDTSC: SKIPGE A,BEST
JRST LMOVE1 ;DO NOT SCORE THIS MOVE
MOVE K,SI ;MOVE INDEX
MOVE P,PHASE ;PHASE IN P
MOVE X3,S(A) ;EVAL SCORE FOR BOOK MOVE
CAMN K,A
SOJLE K,LMOVE1
CAMGE X3,S(K) ;IS IT THE BEST SCORE?
AOS HIGH(P) ;H COUNT (ADD 1 FOR EVERY SCORE > BEST)
CAMN X3,S(K)
AOS EQUAL(P) ;E COUNT
CAMLE X3,S(K)
AOS LOW(P) ;L COUNT (ADD 1 FOR EVERY SCORE < OR = BEST)
PUSHJ PDP,TAB1E ;ON PAGE 2
SOJG K,UPDTSC+3
LMOVE1: SETZM NNNONO#
CAIN U1,"%" ;A BAD MOVE
JRST NONONO
CAIN U1,"=" ;ONLY FAIR MOVE
JRST NOGOOD
CAIN U1,"'" ;BEST MOVE
JRST BSTMOV
LMOVE2: SETZM SI
MOVE A,TA ;GET LAST BOARD
MOVE P,TP
MOVE K,TK
MOVEM A,PLA ;STORE BOARD FOR FUTURE PUPPING
MOVEM P,PLP
MOVEM K,PLK
SETZB X3,LXF ;ZERO INDEX & LEGAL BOOK MOVE FLAG
AOS X2 ;INCREMENT MOVE POINTER
CAIN U1,"X" ;IS IT AN "X"
JRST XCODE ;YES
CAIN U1,"*" ;A STAR?
JRST LA1 ;YES
CAIL U1,60 ;IS IT A NUMBER?
CAILE U1,71 ;IT IS IF 57 < U1 < 72.
SOJA X2,BEGIN2 ;NOT A NUMBER, PROBABLY A <CR>
PUSHJ PDP,NOSTO+2 ;A NUMBER, SO DON'T SAVE BOARD
JRST LA4
;NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B
NOGOOD: SETOM NNNONO
JRST .+3
BSTMOV: MOVEI Z,1 ;FOR DOUBLE CREDIT LATER
MOVEM Z,NNNONO
PUSHJ PDP,MAGIN
HALT
JRST LMOVE2
NONONO: MOVE U1,COLOR
ADDI U1,1
MOVEM U1,WHOWON ;1 WHITE WINS, 2 BLACK WINS
JRST .-6
KEAR.: PUSHJ PDP,NOSTO ;GET NEXT MOVE
MOVE U3,LPOINT
ANDI U3,37777
LSH U3,16 ;GET IN POSITION
KEAR.0: PUSHJ PDP,MAGIN
HALT
MOVE U2,U1
PUSHJ PDP,MAGIN
HALT
CAIN U1,15 ;NOT A CR
JRST KEAR.2
CAIE U1," "
CAIN U1,"+"
JRST KEAR.2 ;SINGLE CHARACTER CASE
LSH U2,7
IOR U2,U1
PUSHJ PDP,MAGIN
HALT
JRST KEAR.3
KEAR.2: CAIL U2,60 ;TEST FOR LETTER OR NUMBER
CAILE U2,71
JRST .+3
ADDI U2,14000 ;ADD LEADING 0
JRST .+3
LSH U2,7
ADDI U2,60 ;ADD TRAILING 0
KEAR.3: IOR U2,U3
PUSHJ PDP,BDSTOR
CAIE U1," " ;NOT A SPACE
CAIN U1,15 ;NOT A CR
JRST LA4 ;WE ARE THROUGH
CAIN U1,"+"
JRST KEAR.0 ;SAVE AGAIN
JRST LA4
LA1: SKIPE KEAR ;WHICH DATA IS BEING PROCESSED?
JRST KEAR. ;KEAR DATA.
MOVE U2,LPOINT ;GET PRESENT BRANCH
LSH U2,6
ADD U2,X2 ;ADD INDEX WITHIN THIS BRANCH
BDSTOR: AOS X4,X4VAR ;INDEX TO NEXT SPACE
MOVEM U2,ME(X4) ;STORE THE BOARD
MOVEM A,MA(X4)
MOVEM P,MP(X4)
SKIPE COLOR ;RIGHTMOST GUARD BIT IS COLOR
TRO K,400
MOVEM K,MK(X4)
TRZ K,400 ;ZERO BIT (IT MIGHT NEED IT)
MOVE Z,WHOWON
HRL Z,WINLOS ;SAVE DISDANCE TO WIN OR LOSS
MOVEM Z,MWL(X4) ;SAVE WHOWON FLAG
SKIPE KEAR
POPJ PDP, ;KEAR WANTS RETURN
AOSE DWFLAG ;IT'S -1 ONLY WHEN COMING FROM XCODE
PUSHJ PDP,NOSTO ;GET BOOK MOVE
LA4: PUSHJ PDP,PHASEV ;COMPUTE INITIAL PHASE
MOVE U1,PHASES(U5)
MOVEM U1,PHASAD ;FOR USE IN EVA
SETZB X3,LRNJMP# ;ASSUME NORMAL MOVE
SETZM STOP ;WIPE SLATE CLEAN
PUSHJ PDP,LEGAL ;NOW GET ALL TRUNKS
JRST NOMOV ;NO LEGAL MOVES
JRST .+2 ;DEPEND ON X4NORM FOR SINGLE MOVE DETECT
AOS STOP ;BIT 35 USED FOR X3=0 CASE
PUSHJ PDP,X4NORM
MOVE Z,X4ALL
TRNN Z,16
JRST LA4JJ ;MAY BE FORKED
LA4A: SKIPN U1,WHOWON
JRST LA4B ;OK TO GO ON
SUBI U1,1
CAMN U1,COLOR
JRST LA4J ;DO NOT LEARN
LA4B: SKIPGE NNNONO
JRST LA4J ;DO NOT LEARN
MOVEI X1,1
MOVE Z,EEB
MOVEM Z,EB
MOVEM Z,EBA
MOVE Z,EEB2
MOVEM Z,EB2
MOVEM Z,EBA2
SETZM TA ;FILLED AFTER BOOK MOVE
SETZM X4CNT
SETZM X4MOVE
AOJA X3,ALS2
;LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2
LA4JJ: SETOM LRNJMP
ADDI X3,1
MOVE Z,PLRF-1(X3)
MOVEM Z,LA4RF# ;SAVE IF NEEDED
MOVE Z,PLLF-1(X3)
MOVEM Z,LA4LF#
MOVE Z,PLLB-1(X3)
MOVEM Z,LA4LB#
MOVE Z,PLRB-1(X3)
MOVEM Z,LA4RB#
PUSHJ PDP,PUP
JRST NOMOV ;ERROR SHOULD NEVER HAPPEN
CAME P,TP
JRST .+3
MOVEM A,TA
MOVEM K,TK
PUSHJ PDP,PUP
JRST LDEF ;0NLY ONE MOVE
MOVE Z,LA4RF
MOVEM Z,PLRF-1(X3)
MOVE Z,LA4LF
MOVEM Z,PLLF-1(X3)
MOVE Z,LA4LB
MOVEM Z,PLLB-1(X3)
MOVE Z,LA4RB
MOVEM Z,PLRB-1(X3)
SETZM LRNJMP
SOJA X3,LA4A
LA4J: SETOM LRNJMP
SETZM TA
ADDI X3,1
PUSHJ PDP,PUP
JRST LDEF
CAME P,TP
JRST .-3
MOVEM A,TA
MOVEM K,TK
JRST LDEF
DSKINI: INIT 4,0
SIXBIT /DSK/
XWD MGOBUF,MGIBUF
JRST DSKER
SETZM DATAG+2
MOVE U1,[SIXBIT /CH4ALS/] ;Was / 2KDH/
MOVEM U1,DATAG+3
LOOKUP 4,DATAG
JRST DSKER
INBUF 4,11
AOS (PDP)
POPJ PDP,
DSKER: MOVEI U1,[ASCIZ /NO GAMES ON DSK/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
RELEAS 4,
POPJ PDP,
DATAG: SIXBIT /LEES/
SIXBIT //
Z
Z
Z ;GUARD
EB: BLOCK 20
Z
EB2: BLOCK 20
EBA: Z
EBA2: Z
;ALS1 ALS1B ALS1A ALS2 ALS3
ALS1: MOVE Z,EB+2
MOVEM Z,EEB
MOVE Z,EB+1
MOVEM Z,EEB+1
MOVE Z,EB2+2
MOVEM Z,EEB2
MOVE Z,EB2+1
MOVEM Z,EEB2+1
ALS1B: MOVEI X1,1 ;FOR NON-BOOK MOVES
SKIPE LXF
HRLZ X1,X4ALL ;TO LEFT HALF FOR BOOK MOVES
LSH X1,1 ;TEMPORARY FIX TO TEST
SKIPLE NNNONO
LSH X1,1 ;MULTIPLY BY TWO FOR WIN
PUSHJ PDP,LEV1 ;EVALUATE AND LEARN ON BACKED UP VALUES
ADDM X1,SIGLF(U5) ;UPDATE FINAL TABLE
; SUB U5,PHASAD ;Insert for SYM smoothing in situ
; MOVNS U5
; ADD U5,PHASAD
; MOVSS X1
; ADDM X1,SIGLF(U5)
AOS U2,SI
MOVEM Z,S(U2)
SKIPE LXF
MOVEM U2,BEST
ALS1A: MOVE Z,EBA
MOVEM Z,EB ;OLD VALUE MAY HAVE BEEN BLASTED
MOVEM Z,EEB
MOVE Z,EBA2
MOVEM Z,EB2
MOVEM Z,EEB2
MOVE Z,EEB-1
MOVEM Z,EEB+1
MOVE Z,EEB2-1
MOVEM Z,EEB2+1
ALS2: MOVEI X3,1 ;SAFETY MEASURE
MOVE Z,LOSE ;RESET FOR EACH NEW BRANCH
MOVEM Z,ZZ-1
MOVEM Z,ZZ
SETZM LXF
PUSHJ PDP,PUP
JRST LDEF ;LAST BRANCH PROCESSED
SETZM EVFLAG#
AOS X4CNT ;COUNT OF MOVES
CAME P,TP ;IS THIS THE BOOK MOVE
JRST ALS3 ;NO
MOVEM A,TA ;SAVE UPDATED BOARD
MOVEM K,TK
SETOM LXF ;SET FLAG
MOVE U1,X4CNT ;GET MOVE COUNT
SKIPE COLOR
MOVE U1,X4TAB(U1)
HRL U1,WINLOS
MOVEM U1,X4MOVE
SOSGE WINLOS
SETZM WINLOS ;NEG VALUE MEANS TROUBLE
ALS3: MOVEM A,PLA(X3) ;PREPARE FOR EXTENSION
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
MOVE Z,STOP
AND Z,STOMP(X3) ;SAVE EARLIER X3 VALUES ONLY
MOVEM Z,STOP
PUSHJ PDP,LEGAL
JRST ALS8
JRST ALS3J
MOVE Z,STOP
IOR Z,STBIT(X3) ;RECORD THIS NON-JUMP MOVE
MOVEM Z,STOP
CAMGE X3,LDEPTH
AOJA X3,ALS5 ;GO DEEPER
AND Z,STTEST(X3) ;IS OTHER SIDE EVALUATED
JUMPN Z,ALS3A ;YES SO DO FULL EVA
CAMGE X3,KDEPTH ;MUST WE STOP ANYWAY
AOJA X3,ALS5 ;NO
JRST ALS3A ;DO THE BEST WE CAN
;ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8
ALS3J: CAIGE X3,17 ;SPACE LIMIT
AOJA X3,ALS4
SKIPN LXF ;IS THIS THE BOOK MOVE
JRST ALS1A ;NO SO IGNORE THIS PART
SETOM BEST ;IGNORE SIGNAL
JRST LDEF
ALS3A: CAIG X3,1
JRST ALS1B ;LEVI IN ALS1B ADEQUATE
SETZM LFLAG ;DO NOT UPDATE TABLES NOW
PUSHJ PDP,EVA ;BUT DO EVA
ALS3B: SETOM LFLAG ;RESET LEARN FLAG
MOVNS Z
CAMG Z,ZZ-1(X3)
JRST ALS6
MOVEM Z,ZZ-1(X3) ;BACK SCORE
MOVE Z,EEB(X3)
MOVEM Z,EB(X3) ;ALSO BACK EV DATA
MOVE Z,EEB2(X3)
MOVEM Z,EB2(X3)
MOVE Z,EEB-1(X3)
MOVEM Z,EB-1(X3)
MOVE Z,EEB2-1(X3)
MOVEM Z,EB2-1(X3)
JRST ALS6 ;GET NEXT BOARD AT THIS LEVEL
ALS4: MOVE Z,EEB-3(X3) ;ADVANCE SINCE NOT COMPUTED FOR JUMP
MOVEM Z,EEB-1(X3)
MOVE Z,EEB2-3(X3)
MOVEM Z,EEB2-1(X3)
ALS5: MOVE Z,ZZ-3(X3)
MOVEM Z,ZZ-1(X3)
ALS6: PUSHJ PDP,PUP ;GET NEXT BOARD
JRST ALS7
JRST ALS3
ALS7: CAIG X3,2 ;BACKING FROM WHERE
SOJA X3,ALS1 ;TIME TO UPDATE TABLES
MOVN Z,ZZ-1(X3) ;NORMAL BACK UP
CAMG Z,ZZ-2(X3)
SOJA X3,ALS6 ;GET NEXT BOARD
MOVEM Z,ZZ-2(X3)
MOVE Z,EB(X3)
MOVEM Z,EB-2(X3)
MOVE Z,EB2(X3)
MOVEM Z,EB2-2(X3)
SOJA X3,ALS6
ALS8: MOVE Z,LOSE
JRST ALS3B
;LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3
LDEF: MOVE Z,EBA ;NEXT MOVE PROTECTION
MOVEM Z,EEB-1
MOVE Z,EBA2
MOVEM Z,EEB2-1
MOVEI X3,1
XORM X3,COLOR ;CHANGE COLOR
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
JRST ENDERR ;EOF NOT EXPECETED HERE
CAIN U1,"/" ;A "/"?
SOJA X2,.-3 ;YES, SO DON'T COUNT THIS LAST MOVE
SKIPN TA ;TA NOT = 0 IF BOOK MOVE WAS FOUND
JRST FORGIV-1 ;TA NOT ZERO IF BOOK MOVE FOUND
SKIPN LRNJMP ;SINGLE JUMPS NOT STORED
SKIPN USEBOK ;ARE WE SAVING ROTE
JRST LMOVE+2 ;NO
MOVEM U1,U1S#
SKIPN WINLOS
JRST LDEFA ;NO WINLOS GIVEN
MOVE U1,WHOWON
JUMPE U1,LDEFA ;NO WHOWON DATA
ADD U1,COLOR ;NOTE COLOR ALREADY UPDATED
ADD U1,WINLOS ;ALSO ALREADY CHANGED
TRNN U1,1
AOS U1,WINLOS ;CORECT VALUE TO AGREE
HRLM U1,X4MOVE ;FIX X4MOVE
TRNE U1,1
JRST .+3
LDEFA: SKIPL NNNONO ;IS THIS LESS THAN BEST
PUSHJ PDP,SAVMOV ;NOW SAVE BOARD
MOVE U1,U1S
JRST LMOVE+2
MOVEI U1,[ASCIZ /ILLEGAL BOOK MOVE /]
FORGIV: MOVEM U1,ERRMES#
PUSHJ PDP,MAGIN ;SEE IF WE CAN FORGIVE THIS BOOK MOVE ERROR
JRST ENDERR
CAIE U1,15 ;CR?
JRST .+10
PUSHJ PDP,NEWLIN ;YES, SO GET NEW LINE
JRST ENDERR
CAIN U1," "
JRST LBRNCH
CAIE U1,"&"
CAIN U1,"#"
JRST LTR
CAIE U1,"*"
JRST FORGIV+1
LOC: MOVE U1,ERRMES
PUSHJ PDP,PRINT
MOVEM X2,SAVX2
MOVE U1,LPOINT ;PRINT CURRENT VARIATION POINTER
SETZ X2,
JUMPE U1,.+3
LSHC U1,-7
JUMPN U1,.-1
MOVEM X2,ASCPNT#
MOVEI U1,ASCPNT
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / MOVE /]
PUSHJ PDP,PRINT
MOVE U1,SAVX2 ;PRINT NUMBER OF MOVES WITHIN THIS VARIATION
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
LOC1: PUSHJ PDP,NEWLIN ;FIND TRUNK CARD
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIN U1,"#" ;TRUNK CARD?
JRST LTR ;YES, SO GO TO LTR
CAIN U1,"&" ;A BOLAND HEADER CARD
JRST LTR ;YES
JRST .-6 ;NO, SO GET NEXT CARD
XCODE: PUSHJ PDP,MAGIN ;SKIP OVER BLANK
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIN U1,"/" ;A "/"?
SOJA X2,XCODE ;YES, SO DON'T COUNT "X" & GET NEXT CHAR.
XCODE0: PUSHJ PDP,MAGIN ;GET NEXT CHARACTER
JRST ENDERR ;EOF FOUND, BUT NOT EXPECTED
CAIN U1," " ;A SPACE?
JRST XCODE0 ;YES, SO TRY AGAIN
CAIE U1,15 ;A <CR>?
JRST .+3
PUSHJ PDP,NEWLIN ;YES, SO GET NEW LINE
JRST ENDERR
CAIGE U1,72 ;IS IT A DIGIT?
CAIGE U1,60 ;IT IS IF 57 < U1 < 71.
CAIN U1,"*" ;NOT A NUMBER, SO IS IT A "*"?
AOSA X2 ;IT IS A NUMBER OR A STAR
JRST BEGIN2+2 ;NO MOVES FOLLOW "X"
CAIE U1,"*" ;IS IT A STAR?
JRST .+4 ;NO
SETOM DWFLAG ;YES, SO SET FLAG
PUSHJ PDP,NOSTO
SKIPA
PUSHJ PDP,NOSTO+2 ;GET BOOK MOVE
LA2: PUSHJ PDP,LEGAL ;START LOOKING FOR MOVES
JRST NOMOVE ;NO LEGAL MOVES, SO GO TO ERROR ROUTINE
AOSA X3
ADDI X3,1
CAIN X3,1 ;FIRST TIME THRU?
JRST LA3 ;YES, SO WE KNOW THIS IS NOT THE BOOK MOVE
SKIPL U1,U4S ;GET MOVE DELTA
JRST BM ;A BACKWARD MOVE
TRNE U1,3 ;RIGHT OR LEFT?
SKIPA U1,PLLF-1(X3) ;LF MOVE
MOVE U1,PLRF-1(X3) ;RF MOVE
JRST .+4
BM: TRNE U1,3 ;RIGHT OR LEFT?
SKIPA U1,PLRB-1(X3) ;RB MOVE
MOVE U1,PLLB-1(X3) ;LB MOVE
TDNN U1,U2SS ;AND HERE IS BOOK MOVE
JRST LA3 ;THEY DO NOT INTERSECT
MOVE A,PLA-1(X3)
MOVEM A,TA ;STORE BOARD AFTER X HAS BEEN COMPLETED
MOVEM A,PLA
MOVE P,PLP-1(X3)
MOVEM P,TP
MOVEM P,PLP
MOVE K,PLK-1(X3)
MOVEM K,TK
MOVEM K,PLK
MOVEI U2,1 ;IN CASE COLOR NEEDS CHANGING
TRNN X3,1 ;"X" CHANGE THE ACTIVE SIDE?
XORM U2,COLOR ;YES
SETZM X3
MOVE U2,BKMOVE
XOR U2,A
MOVEM U2,TP ;TP NOW SET UP
SKIPGE DWFLAG
JRST LA1 ;"X" FOLLOWED BY A "*"
JRST LA4
LA3: PUSHJ PDP,PUP
SOJA X3,.-1 ;BACK UP IF THIS LEVEL IS EXHAUSTED
MOVEM A,PLA(X3) ;FOR FUTURE PUP'S
MOVEM P,PLP(X3)
MOVEM K,PLK(X3)
CAIL X3,12 ;SHOULD WE GO DEEPER?
JRST LA3 ;NO, BACK-UP
JRST LA2 ;YES
;BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE
BBRNCH: PUSHJ PDP,MAGIN
HALT
CAIE U1,11 ;LOOK FOR A TAB
JRST .-3
JRST KBRNC2 ;KEAR ROUTINE OK NOW
KBRNCH: MOVEI U2,↑D21
PUSHJ PDP,MAGIN ;GET 23RD CHAR.
HALT
SOJG U2,.-2
KBRNC2: PUSHJ PDP,MAGIN ;THIS IS 23RD CHAR.
HALT
MOVE U3,U1
PUSHJ PDP,MAGIN ;GET NEXT CHAR.
HALT
CAIN U1,15
JRST LDO+4
CAIE U1,11
CAIN U1," "
JRST KBRNC3
LSH U3,7 ;MOVE FIRST CHAR. OVER
IOR U3,U1 ;AND PUT IN SECOND CHAR.
JRST KBRNC4
KBRNC3: CAIL U3,60
CAILE U3,71
JRST .+3
ADDI U3,14000
JRST .+3
LSH U3,7
ADDI U3,60
KBRNC4: MOVEM U3,LPOINT ;STORE VAR. POINTER
PUSHJ PDP,MAGIN ;GET NEXT NON-SPACE CHAR.
HALT
CAIN U1,15 ;WAS CHARACTER A CR
JRST LDO+4 ;AN ERROR
CAIE U1,11 ;IS IT A TAB
CAIN U1," " ;IS IT A SPACE
JRST .-6 ;LAST CHAR. WAS A SPACE OR TAB
MOVE A,U1
PUSHJ PDP,MAGIN
HALT
CAIE U1,15
JRST KBRNC5
CAIL A,60
CAILE U1,71
JRST .+3
ADDI A,14000
JRST .+3
LSH A,7
ADDI A,60
JRST KBRNC6
KBRNC5: LSH A,7
IOR A,U1
KBRNC6: LSH A,16
IOR U3,A
JRST LDO+4 ;NOW GO FIND MATCH
LBRNCH: SKIPE PRNVAR
JRST LOC1
SETZB X2,U3 ;ZERO MOVE POINTER
SKIPE BOLFLG
JRST BBRNCH ;BOLAND FORMAT USED
SKIPE KEAR ;KEAR DATA?
JRST KBRNCH ;YES
MOVEI U2,↑D35 ;GET TO CHAR. #37
PUSHJ PDP,MAGIN ;GET CHAR.
JRST ENDERR
SOJG U2,.-2 ;JUMP IF NOT CHAR. #36
LUL: SETZM U2
LUPE: PUSHJ PDP,MAGIN ;GET CHAR. FROM INPUT BUFFER
JRST ENDERR ;EOF NOT EXPECTED HERE
CAIGE U1,72 ;IS CHAR. A DIGIT?
CAIGE U1,60 ;IT IS IF 57 < U1 < 72.
JRST LDO ;NO
IMULI U2,12
ADD U2,U1
SUBI U2,60
JRST LUPE
LDO: LSH U3,6 ;SAVE LAST NUMBER
ADD U3,U2
CAIE U1," " ;ARE WE THROUGH?
JRST LUL ;NO
MOVEM U3,LPOINT ;STORE THIS BRANCH NUMBER
MOVE U2,X4VAR ;X4VAR IS NUMBER OF SAVED BOARDS
CAMN U3,ME(U2) ;LOOK FOR PROPER TABLE ENTRY
JRST LHERE ;FOUND IT
SOJGE U2,.-2 ;KEEP LOOKING
TDZA U3,.+1 ;NO MATCH, SO VAR. POINTER ERROR?
777777740000
MOVE U2,X4VAR ;TRY AGAIN, THIS TIME WITH VAR. MASKED OUT
MOVE U1,ME(U2)
TRZ U1,740000
CAIN U3,(U1) ;ARE MOVE POINTERS EQUAL?
JRST LHERE ;YES, SO THIS IS THE ONE WE WANT, WE HOPE
SOJGE U2,.-4
MOVEI U1,[ASCIZ /BAD TRUNK /]
JRST FORGIV
LHERE: MOVE A,MA(U2) ;GET THE BOARD
MOVEM A,TA ;PUT IT IN PROPER PLACE
MOVE P,MP(U2)
MOVEM P,TP
MOVE K,MK(U2)
SETZM COLOR
TRZE K,400 ;BIT 27 OF K HAS COLOR
AOS COLOR
MOVEM K,TK
MOVE U1,MWL(U2)
HRRZM U1,WHOWON
HLRZM U1,WINLOS
JRST BEGIN2 ;NOW START LEARNING
;NOMOV NOMOVE ENDERR LERR NOSTO STOP STOMP STTEST STBIT
NOMOV: MOVEI U1,[ASCIZ /"LMOVE" ERROR: NO LEGAL MOVES /]
JRST FORGIV
NOMOVE: MOVEI U1,[ASCIZ /"X" ERROR: NO LEGAL MOVES /]
JRST FORGIV
ENDERR: MOVEI U1,[ASCIZ /EOF FOUND, BUT NOT EXPECTED /]
JRST FORGIV
LERR: MOVE U2,U1
MOVEI U1,[ASCIZ /LEARNING OVERFLOW/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVE U1,U2
JRST X4VAR
NOSTO: PUSHJ PDP,MAGIN ;GET FIRST NUMBER
JRST ENDERR ;EOF IS NOT AN ACCEPTABLE NUMBER
MOVE U2,U1
IMULI U2,12
PUSHJ PDP,MAGIN ;GET SECOND NUMBER
JRST ENDERR
ADD U1,U2
SUBI U1,1020 ;NORMALIZE FOR ASCII CODE
PUSHJ PDP,OUTIN
MOVE U4,U1
MOVNS U1
MOVSI U3,400000
LSH U3,(U1) ;CREATE PROPER BIT POSITION
PUSHJ PDP,MAGIN ;SAME ROUTINE AS ABOVE
JRST ENDERR
MOVE U2,U1
IMULI U2,12
PUSHJ PDP,MAGIN
JRST ENDERR
ADD U1,U2
SUBI U1,1020
PUSHJ PDP,OUTIN
SUB U4,U1 ;U4 IS MOVE DELTA
MOVM U5,U4
MOVNS U1
MOVSI U2,400000
LSH U2,(U1) ;U3-U2 IS MOVE
MOVEM U3,U2SS ;SOURCE BIT
MOVEM U4,U4S ;MOVE DELTA
IOR U2,U3
MOVEM U2,BKMOVE ;SAVE FOR ROTE
XOR U2,A
MOVEM U2,TP ;BOOK MOVE TO VERIFY
POPJ PDP,
STOP: Z ;STOP LOOK AHEAD WORD
STOMP: 0 ;CLEAN UP STOP
1 ;INDEXED BY X3
3
7
17
37
77
177
STTEST: 0 ;TO TEST OTHER SIDE EVAL
1 ;INDEXED BY X3
2
5
12
25
52
125
STBIT: 1 ;NORMAL MOVE INDICATORS FOR STOP WORD
2 ;INDEXED BY X3
4
10
20
40
100
200
;LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L14 L14N
;MACRO USED INL25B
DEFINE TAB (T) <;TABLE COEF. MACRO
SETZ X1,
MOVE Z,T(X1)
PUSHJ PDP,TRJOUT
ADDI X1,1
CAIGE X1,5
JRST .-4>
LINEAR: MOVE A,[XWD -1,LRNPDL]
SKIPN LFLAG1
JRST L1
SKIPN RFLAG
JRST .+4
SETZM RFLAG
SETOM LFLAG5
SETOM LFLAG6
SKIPN LFLAG5
JRST L1
SETZ X4,
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /LINEAR TERM COEFFICIENTS/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
L1:
POP A,K ;GET TABLE START
JUMPE K,L21A ;LAST AT THIS LEVEL
POP A,Q ;GET RESULT START
MOVEI P,3 ;PHASE COUNTER
SKIPN LFLAG5
JRST L2
REPEAT 4,<
REPEAT 3,< XCT TLIST(X4)
ADDI X4,1
PUSHJ PDP,PRINT>
PUSHJ PDP,TERPRI
ADDI X4,17>
SUBI X4,105
L2: MOVEI U3,26 ;ENTRIES PER TABLE
MOVNM U3,U3S#
HRRM K,L5 ;FIX UP ADDRESSES
HRRM K,L5A
HRRM K,AC
HRRM K,AC1
HRRM K,L10
HRRM K,L10A
HRRM Q,L12
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,AC2
HRRM Q,C6
HRRM Q,C5
JRST SM ;TEMPORARY TEST OF NEW ROUTINE*****
MOVEI X1,12
SETZM TRMA(X1) ;CLEAR TABLES
SOJGE X1,.-1
MOVEI X1,2
L3: MOVEI X2,2
L4: MOVEI X3,4
L5: MOVE Z,(U3)
TDNN Z,[200000,,200000]
JRST .+4
LSH Z,-1 ;DIVIDE TO PREVENT OVERFLOW
AND Z,[177777,,177777]
L5A: MOVEM Z,(U3)
ASH Z,-1 ;TO HELP OVERFLOW PROBLEM
AND Z,[77777,,77777]
ADDM Z,TRMA(X1)
ADDM Z,TRMB(X2)
ADDM Z,TRMC(X3)
SUBI U3,1
SOJGE X3,L5
SOJGE X2,L4
SOJGE X1,L3
SKIPN LFLAG1
JRST .+10
MOVE Z,TRMA
ADD Z,TRMA+2
ADDB Z,TRMA+1 ;CAN USE TEMPORARILY
LSH Z,-22
ADD Z,TRMA+1
ANDI Z,777777
MOVEM Z,TRMAT#
SETZM TRMA+1 ;REQUIRED BY SYMETRY
SETZM TRMB+1
SETZM TRMC+2
MOVS Z,TRMA
ADDB Z,TRMA+2
MOVSM Z,TRMA ;THIS ADDS THESE CORRECTLY
SKIPE LFLAG1 ;DO WE PRINT
PUSHJ PDP,LRJOUT
MOVS Z,TRMB
ADDB Z,TRMB+2
MOVSM Z,TRMB
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVS Z,TRMC
ADDB Z,TRMC+4
MOVSM Z,TRMC
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVS Z,TRMC+1
ADDB Z,TRMC+3
MOVSM Z,TRMC+1
SKIPE LFLAG1
PUSHJ PDP,LRJOUT
MOVEI U3,26
SETZM CPOS# ;COUNT OF POSITIVE ENTRIES
SETZM CNEG# ;COUNT OF NEGATIVE ENTRIES
MOVEI X1,2
L7: MOVEI X2,2
L8: MOVEI X3,4
L9: SETZ Z,
SKIPN LFLAG2
JRST L10
ADD Z,TRMA(X1)
ADD Z,TRMB(X2)
ADD Z,TRMC(X3)
TRNN Z,400000 ;TEST FOR RIGHT OVERFLOW
TLNE Z,200000 ;TEST FOR LEFT OVERFLOW
PUSHJ PDP,LZ ;REPORT TROUBLE
L9A: ASH -6 ;DIVIDE BY 64
MOVE U1,WEIGHT
AND Z,LMSKW(U1) ;PURGE UNDERFLOW
L10: ADD Z,(U3)
SKIPN LFLAG7
JRST L10C
MOVN U1,U3
L10A: MOVS U2,(U1)
L10B: LSH U2,-1
MOVE U1,WEIGH1
AND U2,LMSKW(U1)
ADD Z,U2
L10C: HLRZ U1,Z
HRRZ U2,Z
JUMPE Z,L12
SUB U1,U2
LSH U2,1
ADD U2,U1
ASH U1,14 ;MULTIPLY BY 4096
MOVEM X2,X2S
IDIV U1,U2
MOVE X2,X2S
SKIPLE U1
AOS CPOS ;COUNT POS ENTRIES
SKIPGE U1
AOS CNEG ;COUNT NEG ENTRIES
SKIPE U1 ;DO NOT BOTHER WITH ZERO ENTRIES
ADD U1,CORADD
L12: MOVEM U1,(U3)
SUBI U3,1
SOJGE X3,L9
SOJGE X2,L8
SOJGE X1,L7
L13: MOVE X5,CPOS ;ENTRIES
ADDI X5,1 ;So that none will be missed
LSH X5,-1 ;DIVIDE BY 2
MOVEM X5,CPOS ;ENTRIES PER BUCKET
MOVEI U5,2 ;LARGEST QUANTUM
SETZB U1,U2 ;SAFETY MEASURE
L14: MOVEI U3,26 ;TO INDEX TABLE
PUSHJ PDP,C2P ;FIND NEXT TO FIX
MOVE X5,CPOS ;RESET ENTRIES
SOJG U5,L14
MOVE X5,CNEG
ADDI X5,1 ;So that none will be missed
LSH X5,-1
MOVEM X5,CNEG
MOVEI U5,2
SETZB U1,U2
L14N: MOVEI U3,26
PUSHJ PDP,C2N
MOVE X5,CNEG
SOJG U5,L14N
SKIPE LFLAG5
PUSHJ PDP,TERPRI
ADDI K,SIGSIZ ;FOR NEXT PHASE
ADDI Q,SIGSIZ
SOJGE P,L2 ;COUNT PHASES
SKIPN LFLAG5
JRST L1
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
JRST L1 ;TO NEXT TABLE
;L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
L21A: SKIPN LFLAGT
JRST L21
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /FIRST-LEVEL TABLE COEF./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
L21: POP A,K
SKIPE LFLAG6
SETZM LFLAG5
JUMPLE K,L31 ;LAST AT THIS LEVEL
POP A,Q
JUMPLE Q,L31
MOVEI P,3 ;T0 COUNT PHASES
L22: SKIPN LFLAGT
JRST L22A
MOVEI X1,16
SETZM TABA(X1)
SOJGE X1,.-1
MOVEI X1,4
MOVEI X2,4
MOVEI X3,4
L22A: SETZM CPOS
SETZM CNEG
HRRM K,AC
HRRM K,ACZ
HRRM K,AC1
HRRM Q,AC2
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,C6
HRRM Q,C5
MOVEI U3,76 ;COUNT ENTRIES
MOVNM U3,U3S
JRST SM20 ;For full smoothing
AC: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1
AND Z,[177777177777]
ACZ: MOVEM Z,(U3)
SKIPN LFLAGT
JRST .+11
ADDM Z,TABA(X1)
ADDM Z,TABB(X2)
ADDM Z,TABC(X3)
SOJGE X3,.+5
SOJGE X2,.+3
SUBI X1,1
MOVEI X2,4
MOVEI X3,4
SKIPN LFLAG8
JRST AC3A
MOVN U1,U3
AC1: MOVS U2,(U1)
AC3: LSH U2,-1
MOVE U1,WEIGH2
AND U2,LMSKW(U1)
ADD Z,U2
AC3A: HLRZ U1,Z
HRRZ U2,Z
JUMPE Z,AC2
SUB U1,U2
LSH U2,1
ADD U2,U1
ASH U1,14 ;PLENTY OF SPREAD
MOVEM X2,X2SAC#
IDIV U1,U2
MOVE X2,X2SAC
SKIPLE U1
AOS CPOS
SKIPGE U1
AOS CNEG
SKIPE U1
ADD U1,CORADD
AC2: MOVEM U1,(U3)
SUBI U3,1
CAML U3,U3S
JRST AC
L23: MOVE X5,CPOS
ADDI X5,1 ;Allows one less in 1 bucket
IDIVI X5,7
MOVEM U5,U5SAVE# ;The remainder
MOVEM X5,CPOS
MOVEI U5,7
SETZB U1,U2 ;SAFETY MEASURE
L25B: MOVEI U3,76
PUSHJ PDP,C2P ;FIND LARGEST
CAMN U5,U5SAVE
AOS CPOS ;Time to start accounting for remainder
MOVE X5,CPOS ;RESET ENTRIES
SOJG U5,L25B
MOVE X5,CNEG
ADDI X5,1 ;Allows one less 1 in 1 bucket
IDIVI X5,7
MOVEM U5,U5SAVE# ;The remainder
MOVEM X5,CNEG
MOVEI U5,7
SETZB U1,U2
L25BN: MOVEI U3,76
PUSHJ PDP,C2N
CAMN U5,U5SAVE
AOS CNEG ;Time to start accounting for remainder
MOVE X5,CNEG
SOJG U5,L25BN
SKIPN LFLAGT
JRST L25C
MOVEM X1,X1SL25#
TAB TABA
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB TABB
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB TABC
MOVE X1,X1SL25
PUSHJ PDP,TERPRI
L25C: ADDI K,SIGSIZ
ADDI Q,SIGSIZ
SOJGE P,L22 ;TO NEXT PHASE
SKIPE LFLAGT
PUSHJ PDP,TERPRI
JRST L21 ;TO NEXT TABLE
;TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN
TRJOUT: HLRZ U1,Z
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
MOVEM X1,X1STJ#
MOVEM X2,X2STJ#
IMULI U1,310
IDIV U1,U2
TRNE U1,1
ADDI U1,2
ASH U1,-1
PUSHJ PDP,RJOUT1
MOVE X1,X1STJ
MOVE X2,X2STJ
POPJ PDP,
L31: MOVEI K,SIGLF ;START THIRD LEVEL
MOVEI Q,SIGTF
MOVEI P,3
L32: HRRM K,L34
HRRM K,L34Z
HRRM K,L34A
HRRM Q,L35
HRRM Q,C3P
HRRM Q,C3N
HRRM Q,C5
HRRM Q,C6
MOVEI U3,160
MOVNM U3,U3S
SETZM CPOS
SETZM CNEG
JRST SM30 ;For full smoothing
L34: MOVE Z,(U3)
TDNN Z,[200000200000]
JRST .+4
LSH Z,-1
AND Z,[177777177777]
L34Z: MOVEM Z,(U3)
SKIPN LFLAG9
JRST L34C
MOVN U1,U3
L34A: MOVS U2,(U1)
L34B: LSH U2,-1
MOVE U1,WEIGH3
AND U2,LMSKW(U1)
ADD Z,U2
L34C: HLRZ U1,Z
HLRZ U1,Z
JUMPE Z,L35
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
CAIGE U2,10
SETZ U1,
ASH U1,14 ;MULTIPLY BY 4096
IDIV U1,U2
SKIPLE U1
AOS CPOS
SKIPGE U1
AOS CNEG
SKIPE U1
ADD U1,CORADD
L35: MOVEM U1,(U3)
SUBI U3,1 ;TO NEXT PHASE
CAML U3,U3S
JRST L34
L33: SETZ X5,
MOVE U5,CPOS
SETZB U1,U2
L35B: MOVEI U3,160
PUSHJ PDP,C2P
SETZ X5,
SOJG U5,L35B
SETZ X5,
MOVE U5,CNEG
L35BN: MOVEI U3,160
PUSHJ PDP,C2N
SETZ X5,
SOJG U5,L35BN
ADDI K,SIGSIZ
ADDI Q,SIGSIZ
SOJGE P,L32
SETZM LFLAGT ;TERMINATE F COMMAND
POPJ PDP,
;C2P C3P C4P C5 C2N C3N C4N C6
C2P: MOVEI Z,10001 ;A LARGE NO.
MOVNM Z,LARGE#
C3P: MOVE Z,(U3)
CAMGE Z,CORADD
JRST C4P ;Already processed or negative
SUB Z,CORADD
JUMPLE Z,C4P
CAMG Z,LARGE
JRST .+3
MOVEM Z,LARGE ;SAVE IF LARGER
MOVE U1,U3 ;SAVE INDEX
C4P: SUBI U3,1
CAML U3,U3S
JRST C3P
SKIPLE LARGE
C5: MOVEM U5,(U1) ;QUANTIZE
SOSG X5
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP,
C2N: MOVEI Z,10001 ;A LARGE NO.
MOVEM Z,SMALL#
C3N: MOVE Z,(U3)
CAMGE Z,CORCOM
JRST C4N ;ALREADY PROCESSED
SUB Z,CORADD
JUMPGE Z,C4N
CAML Z,SMALL
JRST .+3
MOVEM Z,SMALL ;SAVE IF SMALLER
MOVE U2,U3 ;SAVE INDEX
C4N: SUBI U3,1
CAML U3,U3S
JRST C3N
SKIPGE SMALL
C6: MOVNM U5,(U2) ;QUANTIZE
SOSG X5
POPJ PDP,
SOS (PDP)
SOS (PDP)
POPJ PDP,
;CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
CORCOM: 300000000000
CORADD: 377000000000
WEIGH1: 1
WEIGH2: 1
WEIGH3: 1
WEIGHT: 6
LMSKW: 777777777777
377777377777
177777177777
077777077777
037777037777
017777017000
007777007777
003777003777
001777001777
000777000777
000377000377
000177000177
000077000077
000037000037
000017000017
000007000007
000003000003
000001000001
000000000000
Z
Z
SIGT22
SIGL22
SIGT21
SIGL21
Z
SIGT16
SIGL16
SIGT15
SIGL15
SIGT14
SIGL14
SIGT13
SIGL13
SIGT12
SIGL12
SIGT11
LRNPDL: SIGL11
;LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC
LRJOUT: HLRZ U1,Z
HRRZ U2,Z
SUB U1,U2
LSH U2,1
ADD U2,U1
MOVEM X1,X1S
MOVEM X2,X2S
IMULI U1,310 ;MULTIPLY BY 200
SKIPN LFLAG5
JRST .+6
MOVEM U1,U1S#
IMULI U1,5
IDIV U1,TRMAT
PUSHJ PDP,RJOUT3
MOVE U1,U1S
IDIV U1,U2 ;WARNING DISTROYS X2
TRNE U1,1
ADDI U1,2
ASH U1,-1 ;DIVIDE BY 2
PUSHJ PDP,RJOUT2
SKIPN LFLAG5
JRST .+3
MOVE U1,U2
PUSHJ PDP,RJOUT
MOVE X1,X1S
MOVE X2,X2S
POPJ PDP,
LZ: MOVEM X2,X2S
MOVEM X1,X1S
MOVEI U1,[ASCIZ /TRM OVERFLOW /]
PUSHJ PDP,PRINT
MOVE U1,X1S
PUSHJ PDP,NUMOUT
MOVE U1,X2S
PUSHJ PDP,NUMOUT
MOVE U1,X3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE X1,X1S
MOVE X2,X2S
POPJ PDP,
RJOUT1: SETZ X2,
SKIPGE U1
SOS X2
MOVM Z,U1
JRST RJ2
RJOUT2: SETZ X2,
SKIPGE U1
SOS X2 ;SPACE FOR - SIGN
MOVM Z,U1
RJ2A: SKIPE LFLAG5
JRST RJ2
POPJ PDP,
RJOUT3: SETZ X2,
SKIPGE U1
SOS X2
MOVM Z,U1
JRST RJ4
LDEPTH: 0 ;LEARNING DEPTH CONTROL
KDEPTH: 3 ;SECOND DEPTH CONTROL NUMBER
LFLAG1: 1 ;NON-ZERO TO SAVE LINEARIZE
LFLAGZ: 1 ;LINEARIZE
LFLAG2: 1 ;TO LINEARIZE SIG
LFLAG3: Z ;TO LINEARIZE LRN
LFLAG5: Z
LFLAG6: Z
LFLAG7: 1
LFLAG8: 1
LFLAG9: 1
TRUNKF: 0
SMOOTH: Z
SMFAZE: 1
PRNVAR: 0
DORM: Z ;NOT 0 TO SAVE PLOT DATA
DSKTAP: Z ;0 FOR DSK AT START
TRMA: BLOCK 3
TRMB: BLOCK 3
TRMC: BLOCK 5
TABA: BLOCK 5
TABB: BLOCK 5
TABC: BLOCK 5
;TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL
TOTALS: MOVEI U1,[ASCIZ / TOTALS /]
PUSHJ PDP,PRINT
MOVE U1,LABELD+1
IDIVI U1,↑D1000
PUSHJ PDP,RJOUT1
MOVEI P,SIGSIZ*3
TOTAL2: MOVE U2,LABEL+2(P)
ADDM U2,TLOW
ADD U2,LABEL+4(P)
ADD U2,LABEL+3(P)
MOVE U1,LABEL+3(P)
ASH U1,-1
ADD U1,LABEL+2(P)
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3
MOVE U1,LABEL+3(P)
ADDM U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1
MOVE U1,LABEL+4(P)
ADDM U1,THIGH
SUBI P,SIGSIZ
JUMPGE P,TOTAL2
MOVE U1,LABEL+1
PUSHJ PDP,RJOUT3
MOVE U2,TEQUAL
MOVE U1,U2
ADD U2,TLOW
ADD U2,THIGH
ASH U1,-1
ADD U1,TLOW
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT3
MOVE U1,TEQUAL
IMULI U1,144
IDIV U1,U2
PUSHJ PDP,RJOUT1
PUSHJ PDP,TERPRI
SETZM THIGH
SETZM TLOW
SETZM TEQUAL
MOVEI P,SIGSIZ*3
MOVEI U1,[ASCIZ / MOVES /]
PUSHJ PDP,PRINT
MOVE U1,LABEL+2(P)
ADD U1,LABEL+3(P)
ADD U1,LABEL+4(P)
PUSHJ PDP,RJOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SUBI P,SIGSIZ
JUMPGE P,.-6
PUSHJ PDP,TERPRI
POPJ PDP,
;SUBROUTINE TO SYMETRICALLY SMOOTH LEARNING DATA
SYM: MOVE A,[XWD -1,SYMPDL]
SYM0: POP A,K
JUMPE K,SYM10
POP A,U2
MOVEI P,3
SYM1: HRRM K,SYM3
HRRM K,SYM4
HRRM K,SYM5
HRRM K,SYM6
MOVE U3,U2
SYM2: MOVN U1,U3
SYM3: MOVS Z,(U1)
SYM4: ADD Z,(U3)
LSH Z,-1
AND Z,LMSKW+1
SYM5: MOVEM Z,(U3)
SYM6: MOVSM Z,(U1)
SUBI U3,1
JUMPGE U3,SYM2
ADDI K,SIGSIZ
SOJGE P,SYM1
JRST SYM0
SYM10: POPJ PDP,
Z
Z
160
SIGLF
76
SIGL22
76
SIGL21
26
SIGL16
26
SIGL15
26
SIGL14
26
SIGL13
26
SIGL12
26
SYMPDL: SIGL11
;FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT
FACTOR: SETZB U2,U3
MOVEI U4,LRN11
FACTO2: MOVEI U1,SIGSIZ-6 ;ALLOW FOR LABEL OF 5
HRRM U4,.+2
HRRM U4,.+3
HLRZ Z,LRN11(U1)
ADD U2,Z
HRRZ Z,LRN11(U1)
ADD U3,Z
SOJGE U1,.-4
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST FACTO2
IMULI U3,144
IDIV U3,U2
SKIPN TRUNKF
JRST .+6
MOVEI U1,[ASCIZ /FACTOR IS /]
PUSHJ PDP,PRINT
MOVE U1,U3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE U4,LRN11
FACTO3: MOVEI U1,SIGSIZ-6
HRRM U4,.+2
HRRM U4,.+4
HLLZ U2,LRN11(U1)
IDIVI U2,144
IMUL U2,U3
HLLM U2,LRN11(U1)
SOJGE U1,.-4
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST FACTO3
POPJ PDP,
DIVIDE: MOVEI U4,LRN11
MOVE U2,DIVMSK
MOVEI U1,SIGSIZ-6
HRRM U4,.+2
HRRM U4,.+5
MOVE Z,LRN11(U1)
LSH Z,-1
AND Z,U2
TDNE Z,[777000777000] ;DO NOTHING IF SMALL
MOVEM Z,LRN11(U1)
SOJGE U1,.-5
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST .-13
MOVEI U1,[ASCIZ /TABLES HALVED/]
PUSHJ PDP,PRINT
JRST TERPRI
DIVMSK: 177777177777
DIVIDT: MOVE U2,[200000400000]
MOVEI U4,LRN11
MOVEI U1,SIGSIZ-6
HRRM U4,.+1
MOVE Z,LRN11(U1)
AND Z,U2
JUMPN Z,.+6
SOJGE U1,.-3
ADDI U4,SIGSIZ
CAIGE U4,LRN11+SIGSIZ*4
JRST .-10
POPJ PDP,
MOVEI U1,[ASCIZ /TIME TO DIVIDE/]
PUSHJ PDP,PRINT
JRST TERPRI
;LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20
;TYPING OF LEARN COMMAND WILL SET LFLAG AND
;GO TO BEGIN
;TYPING OF LEARN, ZERO, TABLES WILL ZERO ALL
;LEARNING TABLES AND BRANCH TO ABOVE COMMAND
;INTERPRETATION.
LZERO: SETZM LABELD
MOVE Z,[XWD LABELD,LABELD+1]
BLT Z,LABELD+SIGSIZ*4-1
POPJ PDP,
LZER2: MOVEI U1,LRN21+SIGSIZ*3
MOVEI U2,LABELD+SIGSIZ*4-1
MOVEI U3,3
LZER2A: HRRZI Z,1(U1)
HRL Z,U1
SETZM @U1
BLT Z,@U2
SUBI U1,SIGSIZ
SUBI U2,SIGSIZ
SOJGE U3,LZER2A
POPJ PDP,
LZER3: MOVEI U1,LRNF+SIGSIZ*3
MOVEI U2,LABELD+SIGSIZ*4-1
MOVEI U3,3
LZER3A: HRRZI Z,1(U1)
HRL Z,U1
SETZM @U1
BLT Z,@U2
SUBI U1,SIGSIZ
SUBI U2,SIGSIZ
SOJGE U3,LZER2A
POPJ PDP,
ZL: MOVEI U5,4
SETZM LABELD(U5)
SETZM LABEL(U5)
SETZM LABEL+SIGSIZ(U5)
SETZM LABEL+SIGSIZ*2(U5)
SETZM LABEL+SIGSIZ*3(U5)
SOJGE U5,.-5
POPJ PDP,
;THIS SHOULD BE FIXED TO WRITE OUT A FILE.*********
LC: PUSHJ PDP,LPTFIX
SETCMM LPFLAG
MOVEI U1,[ASCIZ /FILE NAME # BDS 2 MVS /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
INIT 12,17
SIXBIT /DSK/
Z
HALT
SETZM TTNMVS ;FOR TOTALS
SETZM TTNBDS
MOVEI U2,INPSIZ-1
SETZM INPA(U2)
SOJGE U2,.-1
MOVEI U5,2
MOVE U2,[SIXBIT /MA/]
MOVEM U2,DSKBKE#
MOVE U2,[ASCIZ /MA/]
MOVEM U2,LC7SAE
LC2: MOVEI X4,14
LC3: MOVEI X5,20 ;TO INDEX CRIP
LC3A: MOVE U2,DSKBKE
MOVEM U2,DSKBKD
MOVE U2,LC7SAE
MOVEM U2,LC7SAV
LC4: MOVE U2,CRIP(X4)
LSH U2,14
IOR U2,CRIP(X5)
IOR U2,DSKBKD
MOVEM U2,DSKBKM
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,DSKBKM+1
MOVE U2,[055000000000]
MOVEM U2,DSKBKM+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,DSKBKM+3
LC5: LOOKUP 12,DSKBKM
JRST LC10 ;NO FILE
INPUT 12,BKMIN
SETZM TNOBDS
SETZM TNOMVS
MOVEI U4,INPSIZ/BLOWUP-2
CAIGE U5,2
MOVEI U4,INPSIZ/BLOWUP-3
LC6: SKIPN U3,INPP(U4)
JRST LC6A ;LAST LINE OF THIS FILE
CAIGE U5,2
JRST .+3
TDNE U3,[400400400400] ;ARE THERE TWO MOVES
AOS TNOMVS ;YES
AOS TNOBDS
LC6A: SUBI U4,2
CAIGE U5,2
SUBI U4,1
JUMPGE U4,LC6 ;TEST NEXT ENTRY
LC7: MOVEI U1,LC7SAV
PUSHJ PDP,PRINT
MOVEI U1,LASCIZ(X4)
PUSHJ PDP,PRINT
MOVEI U1,LASCIZ(X5)
PUSHJ PDP,PRINT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TNOBDS
ADDM U1,TTNBDS
PUSHJ PDP,RJOUT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TNOMVS
ADDM U1,TTNMVS
PUSHJ PDP,RJOUT
PUSHJ PDP,TERPRI
SKIPN INPA+INPSIZ/BLOWUP-2 ;MORE MINORS
JRST LC10 ;NO
MOVE U2,DSKBKD
ADD U2,[000100000000]
MOVEM U2,DSKBKD
MOVE U2,LC7SAV
ADD U2,[000020000000]
MOVEM U2,LC7SAV
JRST LC4
LC10: SOJGE X5,LC3A
SOJG X4,LC3
CAIGE U5,2
JRST .+7
PUSHJ PDP,TERPRI
MOVE U2,[SIXBIT /KA/]
MOVEM U2,DSKBKE
MOVE U2,[ASCIZ /KA/]
MOVEM U2,LC7SAE
SOJG U5,LC2
LC20: PUSHJ PDP,TERPRI
SETZM FILEIN
SETZM DSKBKM
SETZM FILCHG
MOVEI U1,[ASCIZ /TOTALS/]
PUSHJ PDP,PRINT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TTNBDS
PUSHJ PDP,RJOUT
MOVEI X1,11
PUSHJ PDP,TYO
MOVE U1,TTNMVS
PUSHJ PDP,RJOUT
PUSHJ PDP,TERPRI
RELEAS 12,
JRST LPTFIX ;POPJ FROM THERE
;LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS
LC7SAV: Z ;TO SAVE ASCIZ
LC7SAE: Z ;DITTO
LASCIZ: ASCIZ /00/
ASCIZ /01/
ASCIZ /02/
ASCIZ /03/
ASCIZ /04/
ASCIZ /05/
ASCIZ /06/
ASCIZ /07/
ASCIZ /08/
ASCIZ /09/
ASCIZ /10/
ASCIZ /11/
ASCIZ /12/
ASCIZ /13/
ASCIZ /14/
ASCIZ /15/
ASCIZ /16/
TTNMVS: Z ;TOTAL NUMBER OF 2 MOVE BOARDS
TTNBDS: Z ;TOTAL NUMBER OF BOARDS
TNOBDS: Z ;BOARDS FOR THIS FILE
TNOMVS: Z ;NUMBER OF TWO MOVE BOARDS
;EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG
SUBTTL MACROS FOR SIGNATURE TABLES
U1SAVE: 0
U2SAVE: 0
X1SAVE: 0
DEFINE MAC1 (S) <;OUTER MACRO
SETZ U1,
MAC2 \<3*S-2>
IMULI U1,5
MAC2 \<3*S-1>
IMULI U1,5
MAC2 \<3*S>
ADD U1,PHASAD
SKIPE LFLAG
ADDM X1,SIGL2'S(U1)
ADD U5,SIGT2'S(U1)>
DEFINE MAC2 (SC) <;CENTRAL MACRO
MAC3 1
MOVE U2,Q
IMULI U2,3
MAC3 1
ADD U2,Q
IMULI U2,5
MAC3 2
ADD U2,Q
ADD U2,PHASAD
SKIPN LFLAG
JRST .+5
MOVE Z,SIGT1'SC(U2)
MOVE U3,SI
MOVEM Z,SIGZ1'SC(U3)
ADDM X1,SIGL1'SC(U2)
ADD U1,SIGT1'SC(U2)>
DEFINE MAC3 (C) <;INNER MACRO
SETZB Q,P
LSHC Q,4
LSHC P,4
SUB Q,P
CAILE Q,C
MOVEI Q,C
CAMGE Q,NEG+C
MOVNI Q,C>
EVA: MOVEM X1,CFZ1 ;SAVE X1
PUSHJ PDP,PCCNT ;COUNT PIECES
MOVE U4,CFLAG ;SEE WHAT KIND OF EVALUATION TO DO
JUMPE U4,CFA1
LEV1: MOVE A,EEB2(X3)
MOVE K,EEB2-1(X3)
SETZ U5,
MAC1 1
IMULI U5,17
MOVE A,EEB(X3)
MOVE K,EEB-1(X3)
MAC1 2
ADD U5,PHASAD
MOVE Z,SIGTF(U5) ;GET FINAL SCORE
SKIPE LFLAG
POPJ PDP, ;LEARNING EXIT
CFC: ADD Z,U3 ;ADD IN PIECE-COUNT TO SCORE
MOVE X1,PLY(X2) ;PLY AT WHICH TIP WAS ENTERED
ADD X1,X3 ;PLUS PLY IN TIP GIVES TRUE PLY
SUBI X1,40
ASH Z,5
SKIPL Z
MOVNS X1
ADD Z,X1 ;ADD PLY TO SCORE
MOVE X1,CFZ1 ;RESTORE X1 FOR RETURN
POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
CFA1: MOVE Z,U3 ;THIS IS ONLY EXECUTED IF CFLAG=0
MOVE X1,PLY(X2)
ADD X1,X3
SUBI X1,77
SKIPL Z
MOVNS X1
ADD Z,X1
CFA3: MOVE X1,CFZ1 ;RESTORE X1 FOR RETURN
POPJ PDP, ;RETURN--SCORE IS LEFT IN Z
SIGSIZ=1356 ;SIZE OF SIG+LABEL IS 750
PHASAD: Z
PHASES: 0
SIGSIZ
SIGSIZ*2
SIGSIZ*3
NEG: 0 ;NEGATION TABLE
-1
-2
-3
-4
-5
-6
-7
-10
;DSAVE RSAVE RFILL
DSAVE: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
MOVE U1,[SIXBIT /ING/]
MOVEM U1,DATA+1
MOVE U1,[055000000000]
MOVEM U1,DATA+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,DATA+3
ENTER 7,DATA
JRST DSKERR
OUTPUT 7,MTAOUT
CLOSE 7,
MOVE U1,[SIXBIT /SIGT0/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT0
CLOSE 7,
MOVE U1,[SIXBIT /SIGT1/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT1
CLOSE 7,
MOVE U1,[SIXBIT /SIGT2/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT2
CLOSE 7,
MOVE U1,[SIXBIT /SIGT3/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
ENTER 7,SIGDAT
JRST DSKERR
OUTPUT 7,SIGT3
RELEAS 7,
MOVEI U1,[ASCIZ /DSAVED AS LEARN.ING/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
RSAVE: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
ENTER 7,RDATA
JRST DSKERR
OUTPUT 7,MTAOUT
RELEAS 7,
MOVEI U1,[ASCIZ /DSAVED AS LEARN.DAT/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
RFILL: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
LOOKUP 7,RDATA
JRST DSKERR
INPUT 7,MTAOUT
RELEAS 7,
MOVEI U1,[ASCIZ /FILLED FROM LEARN.DAT/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
;DFILL DFILL2 DSKERR DATA RDATA
DFILL: INIT 7,17
SIXBIT /DSK/
Z
JRST DSKERR
MOVE U1,[SIXBIT /ING/]
MOVEM U1,DATA+1
MOVE U1,[055000000000]
MOVEM U1,DATA+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,DATA+3
LOOKUP 7,DATA
JRST DSKERR
DFILL2: INPUT 7,MTAOUT
MOVE U1,[SIXBIT /SIGT0/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT0
MOVE U1,[SIXBIT /SIGT1/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT1
MOVE U1,[SIXBIT /SIGT2/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT2
CLOSE 7,
MOVE U1,[SIXBIT /SIGT3/]
MOVEM U1,SIGDAT
MOVE U1,[SIXBIT /DAT/]
MOVEM U1,SIGDAT+1
MOVE U1,[055000000000]
MOVEM U1,SIGDAT+2
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,SIGDAT+3
LOOKUP 7,SIGDAT
JRST DSKERR
INPUT 7,SIGT3
RELEAS 7,
MOVEI U1,[ASCIZ /DFILLED FROM LEARN.ING/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
DSKERR: MOVEI U1,[ASCIZ /TRY AGAIN/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
DATA: SIXBIT /LEARN/
SIXBIT /ING/
055000000000
SIXBIT / 3ALS/
RDATA: SIXBIT /LEARN/
SIXBIT /DAT/
055000000000
SIXBIT / 3ALS/
;MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF
MTAOUT: IOWD SIGSIZ*4,LABELD
Z
SIGDAT: SIXBIT /SIGT0/
SIXBIT /DAT/
055000000000
SIXBIT / 3ALS/
SIGT0: IOWD SIGSIZ,LABEL
Z
SIGT1: IOWD SIGSIZ,LABEL+SIGSIZ
Z
SIGT2: IOWD SIGSIZ,LABEL+SIGSIZ*2
Z
SIGT3: IOWD SIGSIZ,LABEL+SIGSIZ*3
Z
SUBTTL DATA FOR EVALUATION
CFZ1: Z ;TEMPORARY STORAGE
CFZ2: Z
CFZ3: Z
CFZ4: Z
CFZ5: Z
CFZ10: Z ;BACKUP LOCATION FOR PASK
CFZ11: Z ;BACKUP LOCATION FOR ACTK
CEMPTY: Z ;TEMPORARY LOCATION FOR EMPTY, ET.AL.
LABEL: BLOCK 5
EVAL11: BLOCK 26 ;SIGNATURE TABLES
SIGT11: BLOCK 27 ;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12: BLOCK 26
SIGT12: BLOCK 27
EVAL13: BLOCK 26
SIGT13: BLOCK 27
EVAL14: BLOCK 26
SIGT14: BLOCK 27
EVAL15: BLOCK 26
SIGT15: BLOCK 27
EVAL16: BLOCK 26
SIGT16: BLOCK 27
EVAL21: BLOCK 76
SIGT21: BLOCK 77
EVAL22: BLOCK 76
SIGT22: BLOCK 77
EVALF: BLOCK 160
SIGTF: BLOCK 161
BLOCK SIGSIZ*3 ;SPACE FOR OTHER PHASES
LABELD: BLOCK 5 ;TO BALANCE LABEL
LRN11: BLOCK 26 ;LEARNING TABLES
SIGL11: BLOCK 27
LRN12: BLOCK 26
SIGL12: BLOCK 27
LRN13: BLOCK 26
SIGL13: BLOCK 27
LRN14: BLOCK 26
SIGL14: BLOCK 27
LRN15: BLOCK 26
SIGL15: BLOCK 27
LRN16: BLOCK 26
SIGL16: BLOCK 27
LRN21: BLOCK 76
SIGL21: BLOCK 77
LRN22: BLOCK 76
SIGL22: BLOCK 77
LRNF: BLOCK 160
SIGLF: BLOCK 161
BLOCK SIGSIZ*3 ;SPACE FOR OTHER PHASES
LABEL1=LABEL+SIGSIZ
LABEL2=LABEL+SIGSIZ*2
LABEL3=LABEL+SIGSIZ*3
LABLD1=LABELD+SIGSIZ
LABLD2=LABELD+SIGSIZ*2
LABLD3=LABELD+SIGSIZ*3
;SAVMOV SAV0
BLOWUP==10 ;RELATIVE SIZE OF INPSIZ IN L AND P
INPSIZ==↑D1020*BLOWUP ;INPSIZ=↑D1020 IN CKP
BOKSIZ=↑D512 ;2**N FOR CONVENIENCE
SAVMOV: AOS X3,BINDEX
MOVE A,PLA
MOVE P,PLP
MOVE K,PLK
PUSHJ PDP,FINDFI ;GET FILE DESIGNATION
HRLZS U2
HRR U2,X3
MOVEM U2,BOOKI(X3)
SKIPE COLOR ;COLOR HAS ALREADY BEEN REVERSED
JRST SAV0
PUSHJ PDP,REVERA
MOVEM Z,BOOKA(X3)
PUSHJ PDP,REVERP
MOVEM Z,BOOKP(X3)
PUSHJ PDP,REVERK
MOVEM Z,BOOKK(X3)
JRST .+4
SAV0: MOVEM A,BOOKA(X3)
MOVEM P,BOOKP(X3)
MOVEM K,BOOKK(X3)
MOVE Z,X4MOVE
MOVEM Z,BOOKM(X3)
CAIGE X3,BOKSIZ-1
POPJ PDP,
MOVEM X2,X2MS# ;SAVE VALUES
MOVEM X4,X4MS#
PUSHJ PDP,MERGE
MOVE X2,X2MS ;RESTORE FORMER VALUES
MOVE X4,X4MS
POPJ PDP,
;MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX
MERGE: MOVMS PLACE
SETOM BINDEX
MOVEI Z,1
MOVEI X3,BOKSIZ
MER0: SUB X3,Z
SKIPL PLACE
JRST .+3
CAIG X3,BOKSIZ
JRST MER8
JUMPLE X3,MER8
MOVE U1,BOOKI(X3)
CAMG U1,BOOKI-1(X3)
JRST MER6
MER1: MOVE X1,X3
SUB X1,Z
MOVEM X3,STOP1#
MOVEM X3,STOP2#
ADDM Z,STOP2
MOVE U4,X1
ADD U4,PLACE
MER2: CAMG U1,BOOKI(X1)
AOSA X1
AOSA X3
MOVE U1,BOOKI-1(X1)
MOVEM U1,BOOKI(U4)
MOVE U1,BOOKI(X3)
CAML X1,STOP1
AOJA U4,MER4
CAMGE X3,STOP2
AOJA U4,MER2
MER3: ADDI U4,1
MOVE U1,BOOKI(X1)
MOVEM U1,BOOKI(U4)
ADDI X1,1
CAML X1,STOP1
JRST MER5
AOJA U4,MER3+1
MER4: MOVE U1,BOOKI(X3)
MOVEM U1,BOOKI(U4)
ADDI X3,1
CAMGE X3,STOP2
AOJA U4,MER4
MER5: MOVE X3,STOP1
SUB X3,Z
JRST MER0
MER6: MOVEI U2,BOOKI(X3)
SUB U2,Z
HRLS U2
ADD U2,PLACE
HRRM U2,MER7
ADDM Z,MER7
ADDM Z,MER7
SOS MER7
MER7: BLT U2,
SUB X3,Z
JRST MER0
MER8: LSH Z,1
CAIL Z,BOKSIZ
JRST INSERT
MOVEI X3,BOKSIZ
SKIPL PLACE
ADD X3,PLACE
MOVNS PLACE
JRST MER0
PLACE: BOKSIZ
BINDEX: -1 ;SAVMOV COUNT
;INSERT INS2 INS1A INS3A INS3B INS4B INS4C INS4D INS4E INS4F INS5 INSX INS6
INSERT: MOVEI X4,BOKSIZ-1
INS2: JUMPL X4,INS6 ;END OF INSERT
HLRZ U1,BOOKI(X4) ;GET FILE DESCRIPTOR
SKIPL PLACE ;IS THIS THE RIGHT ONE?
HLRZ U1,BOOKI+BOKSIZ(X4);GET FILE DESCRIPTOR
CAMN U1,FILEIN ;CORRECT FILE ALREADY IN CORE?
JRST INS1A ;YES
MOVEM U1,FILEI2 ;SAVE NEW VALUE
SKIPE FILCHG# ;HAS FILE BEEN CHANGED
PUSHJ PDP,DMPFIL ;YES, SO DUMP CURRENT FILE
PUSHJ PDP,GETFIL ;AND GET NEW FILE
INS1A: HRRZ X3,BOOKI(X4) ;GET INDEX
SKIPL PLACE ;BUT GET THE RIGHT ONE!
HRRZ X3,BOOKI+BOKSIZ(X4) ;INDICES UNORDERED SINCE LABEL SORT
SKIPN U2,BOOKA(X3)
JRST INSZZ
MOVE U3,BOOKP(X3)
MOVE U4,BOOKK(X3)
PUSHJ PDP,FINDX1 ;FIND LINE LOCATION
JRST INS4B ;NOT FOUND
JUMPN U4,INSX+1 ;ONLY FIRST K MOVE SAVED
INS3A: MOVE Z,INPA(X1)
AND Z,[400400400400]
MOVE X2,BOOKM(X3)
PUSHJ PDP,INBITS
JUMPN Z,INS3B ;NORMAL CASE
IORM X2,INPA(X1) ;INSERT MOVE
MOVEM X1,X1S
MOVEI U1,[ASCIZ /REPLACING 0-0 BOARD AT X3=/]
PUSHJ PDP,PRINT
MOVE U1,X3
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
MOVE X1,X1S
JUMPE U4,INSX ;NON KING CASE
HLRZ X2,BOOKM(X3)
LSH X2,-4
PUSHJ PDP,INBITS
IORM X2,INPP(X1)
HLRZ X2,BOOKM(X3)
ANDI X2,17
PUSHJ PDP,INBITS
IORM X2,INPK(X1)
JRST INSX
INS3B: CAMN Z,X2
JRST INSX+1 ;ITS A DUPLICATE
MOVE Z,INPP(X1)
AND Z,[400400400400]
JUMPN Z,INSX+1 ;ONLY TWO MOVES SAVED
IORM X2,INPP(X1)
JRST INSX ;CORRECTION FINISHED
INS4B: CAIL X1,INPSIZ
JRST INSZ ;WOOPS FILE MUST BE FULL
MOVEI U4,INPSIZ-1
MOVE Z,BOOKK(X3)
MOVE X2,BOOKM(X3) ;TO INSERT MOVE INFO
PUSHJ PDP,INBITS
IORM X2,BOOKA(X3)
JUMPE Z,INS4E
HLRZ X2,BOOKM(X3) ;NOW WINLOS INFO
JUMPE X2,INS4C ;DRAW CASE
LSH X2,-4 ;GET LEFT HALF
PUSHJ PDP,INBITS
IORM X2,BOOKP(X3)
HLRZ X2,BOOKM(X3) ;NOW RIGHT HALF
ANDI X2,17 ;ZERO OUT LEFT 4 BITS
PUSHJ PDP,INBITS
IORM X2,BOOKK(X3)
INS4C: SKIPN INPA(X1) ;IS DESIGNATED LINE EMPTY
JRST INS5 ;YES
MOVEI U4,INPSIZ-3
SKIPE INPA(U4) ;IS FILE FULL
JRST INSZ ;YES
SUBI U4,3
SKIPN U3,INPA(U4)
JRST .-2
INS4D: CAMGE U4,X1
JRST INS5
MOVE U3,INPA(U4)
MOVEM U3,INPA+3(U4)
MOVE U3,INPP(U4)
MOVEM U3,INPP+3(U4)
MOVE U3,INPK(U4)
MOVEM U3,INPK+3(U4)
SUBI U4,3
JRST INS4D
INS4E: SKIPN INPA(X1)
JRST INS5
MOVEI U4,INPSIZ-2
SKIPE INPA(U4)
JRST INSZ
SUBI U4,2
SKIPN INPA(U4)
JRST .-2
INS4F: CAMGE U4,X1
JRST INS5
MOVE U3,INPA(U4)
MOVEM U3,INPA+2(U4)
MOVE U3,INPP(U4)
MOVEM U3,INPP+2(U4)
SUBI U4,2
JRST INS4F
INS5: MOVE U2,BOOKA(X3)
MOVEM U2,INPA(X1)
MOVE U2,BOOKP(X3)
MOVEM U2,INPP(X1)
JUMPE Z,.+3
MOVE U2,BOOKK(X3)
MOVEM U2,INPK(X1)
INSX: AOS FILCHG ;FILE CHANGE COUNT
SOJGE X4,INS2
INS6: SKIPE FILCHG ;HAS FILE BEEN CHANGED
PUSHJ PDP,DMPFIL ;YES SO DUMP
SETZM FILEIN ;FORCE NEW FILE IN
MOVEI U1,[ASCIZ /BSAVED./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST INSZZ
;INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR
INSZ: MOVEI U1,[ASCIZ /UNABLE TO ADD TO FILE /]
PUSHJ PDP,PRINT
MOVE U1,FILEIN
PUSHJ PDP,OCTOUT
PUSHJ PDP,TERPRI
JRST INSX+1 ;NO CHANGE TO REPORT
INSZZ: INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,WHERIN+1
MOVE U2,[055000000000]
MOVEM U2,WHERIN+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,WHERIN+3
ENTER 12,WHERIN
HALT
OUTPUT 12,WHRINS
RELEAS 12,
POPJ PDP,
WHERIN: SIXBIT /DIRECT/
SIXBIT /CHK/
055000000000
SIXBIT / 3ALS/
WHERES=1133 ;MUST BE SAME AS IN CKB
WHRINS: IOWD WHERES,WHERE
Z
GETFIL: MOVEI U2,INPSIZ-1
SETZM INPA(U2)
SOJGE U2,.-1
MOVE U2,BKMIN2
MOVEM U2,BKMIN
MOVE U1,FILEI2 ;U1 MAY HAVE BEEN CHANGED
MOVEM U1,FILEIN ;NOW ACKNOWLEDGE NEW FILE
LDB U2,[POINT 5,U1,29]
LDB U3,[POINT 5,U1,35]
MOVE U2,CRIP(U2)
LSH U2,14 ;MAKE ROOM FOR REST
IOR U2,CRIP(U3)
TRNN U1,10000 ;TEST K BIT
IOR U2,[SIXBIT /MA/]
TRNE U1,10000 ;TEST AGAIN
IOR U2,[SIXBIT /KA/] ;KING BOARDS
MOVEM U2,DSKBKD ;SAVE FOR DMPFIL
SETZM FILCHG ;START OVER
INIT 12,17
SIXBIT /DSK/
Z
HALT
GETFIA: MOVEM U2,DSKBKM
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,DSKBKM+1
MOVE U2,[055000000000]
MOVEM U2,DSKBKM+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,DSKBKM+3
LOOKUP 12,DSKBKM
JRST GETFIR
INPUT 12,BKMIN
HRRZ U2,BKMIN
ADDI U2,INPSIZ/BLOWUP
HRRM U2,BKMIN
SKIPE (U2) ;IS FILE PARTIALLY EMPTY
CAIL U2,INPA+INPSIZ-1 ;IS LAST FILE IN
JRST GETFIR ;YES
MOVE U2,DSKBKM
ADD U2,[000100000000]
JRST GETFIA
GETFIR: RELEAS 12,
POPJ PDP,
;ZEROIT DMPFIL DMPFI1 DMPFI2 DMPFI3 DSKBKD DSKBKM BKMIN BKMIN2 INPA BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN FILEI2 INBITS
ZEROIT: HRRZ U1,BKMIN2
SETZM 1(U1) ;ZERO REST OF TABLE
CAMGE U1,INPA+INPSIZ-2
AOJA U1,.-2
POPJ PDP,
DMPFIL: INIT 12,17
SIXBIT /DSK/
Z
HALT
MOVE U1,FILEIN ;RESTORE VALUE
MOVE U2,BKMIN2
MOVEM U2,BKMIN ;START AT FRONT
MOVE U2,DSKBKD ;STARTING FILE
SETZ X5, ;TO INDEX WHERE
MOVEI U5,BLOWUP ;TO COUNT
DMPFI1: SKIPN U3,WHERE(X5)
JRST DMPFI2-1 ;PUT DATA HERE
CAMN U1,U3
JRST DMPFI2 ;FOUND
ADDI X5,BLOWUP+1
CAIGE X5,WHERES
JRST DMPFI1 ;TRY AGAIN
MOVEI U1,[ASCIZ /WHERE TABLE IS FULL/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST DMPFI3 ;TROUBLE TROUBLE
MOVEM U1,WHERE(X5)
DMPFI2: MOVEM U2,DSKBKM
MOVE U2,[SIXBIT /CHK/]
MOVEM U2,DSKBKM+1
MOVE U2,[055000000000]
MOVEM U2,DSKBKM+2
MOVE U2,[SIXBIT / 3ALS/]
MOVEM U2,DSKBKM+3
ENTER 12,DSKBKM
HALT
OUTPUT 12,BKMIN
HRRZ U2,BKMIN
ADDI U2,INPSIZ/BLOWUP
HRRM U2,BKMIN
MOVE Z,-1(U2)
SKIPE BOOKK(X3)
MOVE Z,-2(U2)
AND Z,[377377377377] ;REMOVE MOVE BITS
MOVEM Z,WHERE+1(X5)
ADDI X5,1
JUMPE Z,DMPFI3
MOVE U2,DSKBKM
ADD U2,[000100000000]
SOJG U5,DMPFI2
DMPFI3: RELEAS 12,
SETZM FILCHG
POPJ PDP,
DSKBKD: Z ;TEMPORARY SAVE OF DSKBKM FOR DMPFIL
DSKBKM: Z
SIXBIT /CHK/
055000000000
SIXBIT / 3ALS/
Z
BKMIN: IOWD INPSIZ/BLOWUP,INPA
Z
BKMIN2: IOWD INPSIZ/BLOWUP,INPA
Z
Z
INPA: BLOCK INPSIZ
INPP=INPA+1
INPK=INPA+2
Z
BOOKA: BLOCK BOKSIZ+20
BOOKP: BLOCK BOKSIZ+20
BOOKK: BLOCK BOKSIZ+20
BOOKM: BLOCK BOKSIZ+20
BOOKI: BLOCK BOKSIZ*2+40
FILEIN: Z ;FILE ACTUALLY IN MEMORY
FILEI2: Z ;TEMPORARY STORE OF FILEIN
INBITS: LSHC X2,-3
LSH X2,10
LSHC X2,1
LSH X2,10
LSHC X2,1
LSH X2,10
LSHC X2,1
LSH X2,10
POPJ PDP,
;BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4
BOLAND: PUSHJ PDP,MAGIN
HALT
MOVE X1,U1
SKIPE TRUNKF ;DO WE PRINT
PUSHJ PDP,TYO
CAIN U1,11 ;LOOK FOR A TAB
JRST .+3 ;ONE FOUND
CAIE U1,15 ;LOOK FOR C.R.
JRST .-10 ;NOT TIME TO STOP
SKIPE TRUNKF ;NOW END COMMENT
PUSHJ PDP,TERPRI
BOL1: PUSHJ PDP,MAGIN
HALT
CAIN U1,11 ;IGNORE SECOND TAB
JRST .-3
MOVEM U1,BORW# ;BLACK OR WHITE TO PLAY
SETZ U2,
CAIN U1,"D"
JRST BOL3
BOL2: PUSHJ PDP,MAGIN
HALT
CAIGE U1,72
CAIGE U1,60
JRST BOL3
IMULI U2,12
ADD U2,U1
SUBI U2,60
SETZ U1,
JRST BOL2
BOL3: MOVEM U2,WINLOS
PUSHJ PDP,NEWLIN
HALT
JUMPE U2,BOL4
CAME U1,BORW
JRST .+4
TRNN U2,1
AOS WINLOS
JRST .+3
TRNE U2,1
AOS WINLOS
BOL4: MOVEI Z,1
CAIN U1,"W"
MOVEM Z,COLOR
CAIN U1,"B"
SETZM COLOR
PUSHJ PDP,BDIN ;SET UP BOARD
MOVE A,U3
PUSHJ PDP,NEWLIN
HALT
PUSHJ PDP,BDIN0
MOVE P,U3
MOVE K,U5
MOVEM A,TA
MOVEM P,TP
MOVEM K,TK
MOVEI U1,"TK"
MOVEM U1,LPOINT
SETZ X2,
SETOM X4VAR
JRST BEGIN2
X4VAR: -1 ;COUNT OF VARIATION BOARDS
BDIN: SETZ U5,
BDIN0: SETZ U3,
BDIN1: HRLZI U4,400000
SETZ U2,
BDIN2: PUSHJ PDP,MAGIN
HALT
CAIGE U1,72
CAIGE U1,60
JRST BDIN3
IMULI U2,12
ADD U2,U1
SUBI U2,60
SETZ U1,
JRST BDIN2
BDIN3: EXCH U1,U2
JUMPE U1,BDIN4
PUSHJ PDP,OUTIN
MOVNS U1
ROT U4,(U1)
TDO U3,U4
CAIE U2,"K"
JRST .+3
TDO U5,U4
JRST BDIN1
BDIN4: CAIN U2,","
JRST BDIN1
POPJ PDP,
;FIXX NOFIND FIXK FIXK2
FIXX: TTYUUO 11,0
SETZM LASCAR
SETZM FLAG#
SETZM FIXINS#
MOVEI U1,1
SETZM COLOR
CAME U1,SI
AOS COLOR
SETZB X3,X4
MOVEM A,PLA
MOVEM P,PLP
MOVEM K,PLK
SETZM OJ
PUSHJ PDP,LEGAL
JRST FIX1 ;NO LEGAL MOVES
AOS OJ ;SET JUMP FLAG
PUSHJ PDP,X4NORM
MOVEI U1,[ASCIZ /LEGAL MOVES ARE:/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,LEGM ;REPORT LEGAL MOVES
SETOM BINDEX
MOVEI Z,1
XORM Z,COLOR ;COLOR IS REVERSED IN SAVMOV
PUSHJ PDP,SAVMOV
MOVEI Z,1
XORM Z,COLOR
HLRZ U1,BOOKI
MOVEM U1,FILEI2
CAME U1,FILEIN
PUSHJ PDP,GETFIL
MOVE U2,BOOKA
MOVE U3,BOOKP
MOVE U4,BOOKK
PUSHJ PDP,FINDX1
JRST NOFIND
MOVEM X1,X1S
MOVEI U1,[ASCIZ /LISTED MOVES ARE /]
PUSHJ PDP,PRINT
MOVE X1,X1S
MOVE X5,INPA(X1)
PUSHJ PDP,EXBITS
PUSHJ PDP,RPMOVE
MOVE X5,INPP(X1)
PUSHJ PDP,EXBITS
SKIPE BOOKK ;A KING BOARD
JRST FIXK ;YES
JUMPE X5,FIX6
MOVEI U1,[ASCIZ /,/]
PUSHJ PDP,PRINT
PUSHJ PDP,RPMOVE
JRST FIX6
NOFIND: MOVEM X1,X1S
MOVEI U1,[ASCIZ /BOARD NOT FOUND, CR OR TYPE MOVE :/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,SCAN
CAIN U1,12 ;A LINE FEED
JRST .-2 ;YES
CAIN U1,15 ;A CR
JRST FIXOK
SETOM FIXINS ;SO NEW BOARD WILL BE INSERTED
SETZM BOOKM
SETZM BOOKM+1
JRST FIX8 ;NOW GET MOVE
FIXK: MOVE Z,X5
MOVE X5,INPK(X1)
PUSHJ PDP,EXBITS
LSH Z,4
IORB X5,Z
JUMPE X5,FIXK2
MOVEI U1,[ASCIZ /, WIN-LOSS DISTANCE IS /]
PUSHJ PDP,PRINT
MOVE U1,X5
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
JRST FIX6
FIXK2: MOVEI U1,[ASCIZ /, REPORTED AS A DRAW./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX6
;RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13
RPMOVE: MOVEM X5,X4
JUMPN X5,.+4
MOVEI U1,[ASCIZ /0-0/]
PUSHJ PDP,PRINT
POPJ PDP,
SKIPN COLOR
JRST .+7
MOVEI U1,1
CAMN X4,X4TAB(U1)
JRST .+3
CAIGE U1,17
AOJA U1,.-3
MOVE X4,U1
SUBI X4,1 ;COUNT FROM ZERO
MOVE U3,MOVES(X4)
JUMPN U3,.+4
MOVEI U1,[ASCIZ /ILLEGAL/]
PUSHJ PDP,PRINT
POPJ PDP,
HLRZ U1,U3
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
HRRZ U1,U3
PUSHJ PDP,NUMOUT
POPJ PDP,
FIX1: MOVEI U1,[ASCIZ /NO LEGAL MOVES FOUND./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
POPJ PDP,
FIX6: TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /CR IF OK, OR ENTER MOVES WANTED/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
FIX7: PUSHJ PDP,SCAN
CAIN U1,12 ;A LINE FEED
JRST FIX7 ;YES
CAIN U1,15 ;A CR
JRST FIXOK
SETZM BOOKM
SETZM BOOKM+1
FIX8: HRLZ U2,U1 ;START IN LEFT HALF
PUSHJ PDP,SCAN
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRR U2,U1 ;TERMINATION IN RIGHT HALF
JUMPE U2,NULL ;TO STORE NO-MOVE BOARD FOR TEST
MOVEI X4,20
CAMN U2,MOVES(X4)
JRST .+6
SOJGE X4,.-2
MOVEI U1,[ASCIZ /ILLEGAL MOVE. /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX6
ADDI X4,1 ;TO COUNT FROM 1
SKIPE COLOR
MOVE X4,X4TAB(X4)
MOVEM X4,BOOKM
SKIPE BOOKK
JRST FIX9K
PUSHJ PDP,SCAN
CAIN U1,15
JRST FIX11
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRRZS U1
HRLZ U2,U1
PUSHJ PDP,SCAN
TLNE U1,-1
JRST .+3
PUSHJ PDP,EOL
JRST ERR
HRR U2,U1
MOVEI X4,20
CAMN U2,MOVES(X4)
JRST .+6
SOJGE X4,.-2
MOVEI U1,[ASCIZ /ILLEGAL SECOND MOVE, FIRST MOVE ONLY WILL BE USED. /]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST FIX11
ADDI X4,1 ;TO COUNT FROM 1
SKIPE COLOR
MOVE X4,X4TAB(X4)
MOVEM X4,BOOKM+1
FIX11: MOVE X1,X1S
SKIPE FIXINS ;IS BOARD IN TABLE
JRST INS4B ;NO SO INSERT
MOVE X1,X1S ;WE NEED THIS
FIX10: HRRZ X2,BOOKM
PUSHJ PDP,INBITS
MOVE U1,INPA(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPA(X1)
SKIPE BOOKK
JRST FIX12
FIX13: MOVE X2,BOOKM+1
PUSHJ PDP,INBITS
MOVE U1,INPP(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPP(X1)
JRST FIXZ
;FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3
FIX12: HLRZ X2,BOOKM
LSH X2,-4
PUSHJ PDP,INBITS
MOVE U1,INPP(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPP(X1)
HLRZ X2,BOOKM
ANDI X2,17
PUSHJ PDP,INBITS
MOVE U1,INPK(X1)
AND U1,[377377377377]
IOR U1,X2
MOVEM U1,INPK(X1)
JRST FIXZ
FIXOK: MOVEI U1,[ASCIZ /NO CHANGE MADE./]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
JRST .+2
FIXZ: PUSHJ PDP,DMPFIL
PUSHJ PDP,TERPRI
SETOM BINDEX ;TO OVERWRITE TRASH
POPJ PDP,
ACCEPT: PUSHJ PDP,TERPRI
SETZM U5
TTYUUO 11,0
SETZM LASCAR
MOVEI U1,[ASCIZ /BLACK PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;READ IN BLACK PIECES
MOVEM U3,OA ;STORE BLACK PIECES
MOVEI U1,[ASCIZ /WHITE PIECES ON: /]
PUSHJ PDP,PRINT
PUSHJ PDP,ACC ;NOW READ IN WHITE PIECES
MOVEI U1,[ASCIZ /BLACK TO PLAY? /]
PUSHJ PDP,PRINT
MOVEI U1,1
MOVEM U1,SI
PUSHJ PDP,NOYES
AOSA SI
JRST .+3 ;BLACK IS TO PLAY
EXCH U3,OA
SETZM SIDE
MOVEM U3,OP ;STORE WHITE PIECES
MOVEM U5,OK
MOVE A,OA
MOVEM A,PLA
MOVE P,OP
MOVEM P,PLP
MOVE K,OK
MOVEM K,PLK
PUSHJ PDP,TERPRI
JRST FIXX
ACC: SETZM U3
ACC1: HRLZI U4,400000
ACC2: PUSHJ PDP,SCAN
CAIN U1,15 ;CR?
POPJ PDP, ;YES
TLZE U1,400000 ;NUMBER?
JRST ACC3 ;YES
HRRZS U1 ;GET RID OF LEFT HALF FLAG BITS
CAIN U1,K ;IF A KING ...
TDO U5,U4 ; ... SET KING BIT
JRST ACC1
ACC3: PUSHJ PDP,OUTIN ;CONVERT TO INTERNAL NUMBERS
MOVNS U1
ROT U4,(U1) ;ROTATE TO BIT'S POSITION
TDO U3,U4 ;SET PIECE'S BIT
JRST ACC2
;SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
;Routine to smooth data in EVAL table both diagonally and adjacently
;and leave ((L-R)/(L+R) LSH 14) + CORADD in EVAL space
SM: MOVEM K,KSAVE#
SM1: SUBI K,SIGL11
SETZM EVAL11(K)
HRLZI U1,EVAL11(K)
HRRI U1,EVAL11+1(K)
BLT U1,EVAL11+↑D44(K)
MOVEI U1,2 ;First level start
SM3: MOVEI U2,2
SM4: MOVEI U3,4
SM5: MOVE X1,U1
IMULI X1,3
ADD X1,U2
IMULI X1,5
ADD X1,U3
MOVN X2,X1
ADDI X2,↑D44
ADD X1,K
ADD X2,K
MOVS Z,LRN11(X2) ;To balance tables around zero
ADD Z,LRN11(X1)
LSH Z,-1
TRZ Z,400000
ADDM Z,EVAL11(X1)
;JRST SM5A here to surpress adjacent smoothing
LSH Z,-3
TRZ Z,700000
CAIGE U1,2
ADDM Z,EVAL11+↑D15(X1) ;Upward adjacent smoothing, first term
SKIPLE U1
ADDM Z,EVAL11-↑D15(X1) ;Downward adjacent smoothing, first term
CAIGE U2,2 ;Repeat for second term
ADDM Z,EVAL11+5(X1)
SKIPLE U2
ADDM Z,EVAL11-5(X1)
CAIGE U3,4 ;Repeat for third term
ADDM Z,EVAL11+1(X1)
SKIPLE U3
ADDM Z,EVAL11-1(X1)
SM5A: SOJGE U3,SM5
SOJGE U2,SM4
SOJGE U1,SM3
SETZM CPOS
SETZM CNEG
MOVEI U1,↑D44 ;Now get (L-R)/(L+R) ASH 14
MOVE X1,U1
ADD X1,K
SM6: HLRZ U2,EVAL11(X1)
HRRZ U3,EVAL11(X1)
SUB U2,U3
JUMPE U2,SM6A
LSH U3,1
ADD U3,U2
ASH U2,15 ;Multiply by 8192
IDIV U2,U3 ;and get ratio
SKIPLE U2
AOS CPOS
SKIPGE U2
AOS CNEG
SKIPE U2
ADD U2,CORADD ;Make it always positive for processing
SM6A: MOVEM U2,EVAL11(X1)
SOS X1
SOJGE U1,SM6
MOVE K,KSAVE
JRST L13
;Second level smoothing
SM20: MOVEM K,KSAVE
SM21: SUBI K,SIGL21
SETZM EVAL21(K)
HRLZI U1,EVAL21(K)
HRRI U1,EVAL21+1(K)
BLT U1,EVAL21+↑D124(K)
SM22: MOVEI U1,4
SM23: MOVEI U2,4
SM24: MOVEI U3,4
SM25: MOVE X1,U1
IMULI X1,5
ADD X1,U2
IMULI X1,5
ADD X1,U3
MOVN X2,X1
ADDI X2,↑D124
ADD X1,K
ADD X2,K
MOVS Z,LRN21(X2)
ADD Z,LRN21(X1)
LSH Z,-1
TRZ Z,400000
ADDM Z,EVAL21(X1)
;JRST SM25A here to surpress adjacent smoothing
LSH Z,-3
TRZ Z,700000
CAIGE U1,4
ADDM Z,EVAL21+↑D25(X1)
SKIPLE U1
ADDM Z,EVAL21-↑D25(X1)
CAIGE U2,4
ADDM Z,EVAL21+5(X1)
SKIPLE U2
ADDM Z,EVAL21-5(X1)
CAIGE U3,4
ADDM Z,EVAL21+1(X1)
SKIPLE U3
ADDM Z,EVAL21-1(X1)
SM25A: SOJGE U3,SM25
SOJGE U2,SM24
SOJGE U1,SM23
SETZM CPOS
SETZM CNEG
MOVEI U1,↑D124 ;Now get (L-R)/(L+R) ASH 14
MOVE X1,U1
ADD X1,K
SM26: HLRZ U2,EVAL21(X1)
HRRZ U3,EVAL21(X1)
SUB U2,U3
JUMPE U2,SM26A
LSH U3,1
ADD U3,U2
ASH U2,15 ;Multiply by 8192
IDIV U2,U3 ;and get ratio
SKIPLE U2
AOS CPOS
SKIPGE U2
AOS CNEG
SKIPE U2
ADD U2,CORADD ;Make it always positive for processing
SM26A: MOVEM U2,EVAL21(X1)
SOS X1
SOJGE U1,SM26
MOVE K,KSAVE
JRST L23
SM30: MOVEM K,KSAVE#
SM31: SUBI K,SIGLF
SETZM EVALF(K)
HRLZI U1,EVALF(K)
HRRI U1,EVALF+1(K)
BLT U1,EVALF+↑D224(K)
SM32: MOVEI U1,↑D14
SM33: MOVEI U2,↑D14
SM35: MOVE X1,U1
IMULI X1,↑D15
ADD X1,U2
MOVN X2,X1
ADDI X2,↑D224
ADD X1,K
ADD X2,K
MOVS Z,LRNF(X2)
ADD Z,LRNF(X1)
LSH Z,-1
TRZ Z,400000
ADDM Z,EVALF(X1)
JFCL ;Room for JRST SM35A to surpress adjacent smoothing
LSH Z,-2
TRZ Z,600000
CAIGE U1,↑D14
ADDM Z,EVALF+↑D15(X1)
SKIPLE U1
ADDM Z,EVALF-↑D15(X1)
CAIGE U2,↑D14
ADDM Z,EVALF+1(X1)
SKIPLE U2
ADDM Z,EVALF-1(X1)
SM35A: SOJGE U2,SM35
SOJGE U1,SM33
SETZM CPOS
SETZM CNEG
MOVEI U1,↑D224 ;Now get (L-R)/(L+R) ASH 14
MOVE X1,U1
ADD X1,K
SM36: HLRZ U2,EVALF(X1)
HRRZ U3,EVALF(X1)
SUB U2,U3
JUMPE U2,SM36A
LSH U3,1
ADD U3,U2
ASH U2,15 ;Multiply by 8192
IDIV U2,U3 ;and get ratio
SKIPLE U2
AOS CPOS
SKIPGE U2
AOS CNEG
SKIPE U2
ADD U2,CORADD ;Make it always positive for processing
SM36A: MOVEM U2,EVALF(X1)
SOS X1
SOJGE U1,SM36
MOVE K,KSAVE
JRST L33
;SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE TABLST TAB2 TAB3 TAB3A TAB3B TAB4 TAB4B TAB5 TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB25 TAB26 TAB27 TAB31 TAB32 TAB33 TAB34
;Register assignments
; X1 Gets used in NUM1
; U1 Address of ASCIZ to print
; X2 Gets used in some subroutine
; U2 -2 -1 0 1 2 Numbers for headings, Index for 1st 3-range term
; X3 Index between tables
; U3 Index to 5 for 5-range terms
; X4 TLIST index for names
; U4 Repeat count
; X5 Index into EVAL table
; U5 Phase
; Q Index for 2nd 3-range term
SGT5: BLOCK 5 ;5-range term totals
SGT5A: BLOCK 5 ;5-range term totals (for second level)
SGT5B: BLOCK 5 ;5-range term totals (for second level)
SGT5C: BLOCK ↑D15 ;15-range term totals (for third level)
SGT3: BLOCK 3 ;1st 3-range term totals
SGT3A: BLOCK 3 ;2nd 3-range term totals
SGTOT: 0 ;Total for 1st level table
NUM4: CAIGE U1,144
CAMG U1,[-144]
JRST .+3
MOVEI X1," "
PUSHJ PDP,TYO
CAIGE U1,12
CAMG U1,[-12]
JRST .+3
MOVEI X1," "
PUSHJ PDP,TYO
NUM1: JUMPL U1,NUM2
MOVEI X1," "
PUSHJ PDP,TYO
JRST NUM3
;Routine to list Signature Tables in a file called SIGTAB.001 etc.
XPAR: SETOM TABFLG#
SKIPA
TABFIX: SETZM TABFLG
MOVE U1,[SIXBIT /001 /]
MOVEM U1,TBFILE+1
TABFI2: OPEN 2,TBCHAN
JRST TABFIZ
MOVE U1,[SIXBIT / 3ALS/]
MOVEM U1,TBFILE+3
LOOKUP 2,TBFILE
JRST TABFI3
CLOSE 2,
HLLZ U1,TBFILE+1
ADD U1,[1,,0]
MOVEM U1,TBFILE+1
JRST TABFI2
TABFI3: ENTER 2,TBFILE
JRST TABFIZ
OUTBUF 2,4
MOVEI U1,1
EXCH U1,LPFLAG
MOVEM U1,LPFLAS#
PUSHJ PDP,TAB1
RELEAS 2,
MOVE U1,LPFLAS
MOVEM U1,LPFLAG
POPJ PDP,
TABFIZ: OUTSTR [ASCIZ/SIGTAB initiation error/]
POPJ PDP,
TBCHAN: 1 ;Mode
SIXBIT/DSK /
LPTBUF,,0
TBFILE: SIXBIT/TAB/
SIXBIT/001 /
0
SIXBIT/ 3ALS/
;Routine to list Signature Tables (on line when here or to file if from TABFIX)
;If TABFLG is SETOM then only summary info is listed
PAR: SETOM TABFLG
SKIPA
TABLST: SETZM TABFLG
TAB1: MOVEI U5,3 ;Start with phase 3
MOVEI U1,[ASCIZ / Signature Tables after /]
PUSHJ PDP,PRINT
MOVE U1,LABEL
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / boards. /]
PUSHJ PDP,PRINT
TABLS2: MOVE U4,U5
IMULI U4,SIGSIZ
MOVE U2,LABEL+2(U4)
ADD U2,LABEL+3(U4)
ADD U2,LABEL+4(U4)
MOVE U1,LABEL+3(U4)
ASH U1,-1
ADD U1,LABEL+2(U4)
IMULI U1,1750
IDIV U1,U2
IDIVI U1,12
MOVE U2,X2
PUSHJ PDP,RJOUT1
MOVEI U1,[ASCIZ /./]
PUSHJ PDP,PRINT
MOVE U1,U2
PUSHJ PDP,NUMOUT
SOJGE U5,TABLS2
SKIPN TABFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVEI U5,3
TAB2: SKIPE TABFLG
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / Phase /]
PUSHJ PDP,PRINT
MOVE U1,U5
PUSHJ PDP,NUMOUT
SKIPE TABFLG
PUSHJ PDP,TERPRI
SKIPE TABFLG
PUSHJ PDP,TERPRI
MOVE X5,U5
IMULI X5,SIGSIZ
MOVEI X3,6 ;Number of first level tables
MOVE X4,U5
IMULI X4,↑D18 ;18 names per phase
TAB3:
SKIPE TABFLG
JRST TAB3C ;Bypass when PAR or XPAR
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /↓/]
PUSHJ PDP,PRINT
XCT TLIST(X4) ;The 1st 3-range term name
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
XCT TLIST+1(X4) ;The second range-3 term name
PUSHJ PDP,PRINT
MOVEI U1,[ASCIZ / -1 0 +1
/]
PUSHJ PDP,PRINT
XCT TLIST+2(X4) ;The range-5 term name
PUSHJ PDP,PRINT
MOVEI U4,3
TAB3A: MOVNI U2,2 ;Now print -2 -1 0 1 2 three times
TAB3B: MOVE U1,U2 ;Start line with a -1, 0 or 1
PUSHJ PDP,NUM1
CAIGE U2,2
AOJA U2,TAB3B
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJG U4,TAB3A
PUSHJ PDP,TERPRI
TAB3C: MOVEI U2,3
SETZM SGT3(U2)
SETZM SGT3A(U2)
SOJG U2,.-2
MOVEI U3,5
SETZM SGT5(U3)
SOJG U3,.-1
SETZM SGTOT
MOVEI Q,2
MOVNI U4,1 ;The 3 lines of data start with -1, 0, and 1
TAB4: SKIPE TABFLG
JRST TAB4A
PUSHJ PDP,TERPRI
MOVE U1,U4
PUSHJ PDP,NUM1
AOS U4
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB4A: MOVEI U2,2
TAB4B: MOVEI U3,4
TAB5: MOVE U1,EVAL11(X5)
ADDM U1,SGT5(U3)
ADDM U1,SGT3(U2)
ADDM U1,SGT3A(Q)
ADDM U1,SGTOT
SKIPN TABFLG
PUSHJ PDP,NUM1
AOS X5
SOJGE U3,TAB5
MOVEI U1,[ASCIZ / /]
SKIPN TABFLG
PUSHJ PDP,PRINT
SOJGE U2,TAB4B
SOJGE Q,TAB4
SKIPE TABFLG
JRST TAB5A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /
Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
TAB5A: SETZM SGTOT
XCT TLIST(X4) ;The first range-3 term name
PUSHJ PDP,PRINT
MOVEI Q,2
TAB8: MOVE U1,SGT3A(Q)
PUSHJ PDP,NUM4
SETZM SGT3A(Q)
SOJGE Q,TAB8
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST+1(X4) ;The 2nd 3-range term name
PUSHJ PDP,PRINT
MOVEI U2,2
TAB7: MOVE U1,SGT3(U2)
PUSHJ PDP,NUM4
SETZM SGT3(U2)
SOJGE U2,TAB7
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
XCT TLIST+2(X4) ;The 5-range term name
PUSHJ PDP,PRINT
MOVEI U3,4
TAB6: MOVE U1,SGT5(U3)
PUSHJ PDP,NUM4
SETZM SGT5(U3)
SOJGE U3,TAB6
PUSHJ PDP,TERPRI
ADDI X4,3 ;3 names farther along
SOJG X3,TAB3 ;Now for the next first level table
SKIPN TABFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
TAB20: MOVEI U1,[ASCIZ / Second level
/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
MOVE X5,U5
IMULI X5,SIGSIZ
MOVEI X3,2 ;Number of second level tables
MOVE X4,U5
IMULI X4,↑D18 ;18 names per phase
TAB20A: MOVEI U2,3
SKIPE TABFLG
JRST TAB21
MOVEI U1,[ASCIZ /↓/]
PUSHJ PDP,PRINT
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U2,3
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVNI U2,2
TAB20B: MOVE U1,U2
PUSHJ PDP,NUM1
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
AOS U2
CAIG U2,2
JRST TAB20B
PUSHJ PDP,TERPRI
MOVEI U2,3
XCT TLIST(X4)
PUSHJ PDP,PRINT
AOS X4
SOJG U2,.-3
PUSHJ PDP,TERPRI
MOVEI U2,5
MOVEI U1,[ASCIZ /-2-1 0 1 2 /]
PUSHJ PDP,PRINT
SOJG U2,.-2
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
TAB21: MOVEI U2,4
SETZM SGT5(U2)
SETZM SGT5A(U2)
SETZM SGT5B(U2)
SOJGE U2,.-3
MOVEI U2,4
TAB22: MOVEI U3,4
TAB23: MOVEI Q,4
TAB24: MOVE U1,EVAL21(X5)
ADDM U1,SGT5(U2)
ADDM U1,SGT5A(U3)
ADDM U1,SGT5B(Q)
ADDM U1,SGTOT
SKIPN TABFLG
PUSHJ PDP,NUM1
AOS X5
SOJGE Q,TAB24
MOVEI U1,[ASCIZ / /]
SKIPN TABFLG
PUSHJ PDP,PRINT
SOJGE U3,TAB23
SKIPN TABFLG
PUSHJ PDP,TERPRI
SOJGE U2,TAB22
SKIPE TABFLG
JRST TAB24A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
PUSHJ PDP,TERPRI
TAB24A: SETZM SGTOT
MOVEI U2,4
TAB25: MOVE U1,SGT5(U2)
PUSHJ PDP,NUM4
SETZM SGT5(U2)
SOJGE U2,TAB25
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U2,4
TAB26: MOVE U1,SGT5A(U2)
PUSHJ PDP,NUM4
SETZM SGT5A(U2)
SOJGE U2,TAB26
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
MOVEI U2,4
TAB27: MOVE U1,SGT5B(U2)
PUSHJ PDP,NUM4
SETZM SGT5B(U2)
SOJGE U2,TAB27
SKIPN TABFLG
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
SOJG X3,TAB20A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ / Third level/]
PUSHJ PDP,PRINT
PUSHJ PDP,TERPRI
PUSHJ PDP,TERPRI
MOVE X5,U5
IMULI X5,SIGSIZ
MOVEI U2,↑D14
TAB31: MOVEI U3,↑D14
TAB32: MOVE U1,EVALF(X5)
ADDM U1,SGT5(U2)
ADDM U1,SGT5C(U3)
ADDM U1,SGTOT
SKIPN TABFLG
PUSHJ PDP,NUM4
AOS X5
MOVEI U1,[ASCIZ / /]
SKIPN TABFLG
PUSHJ PDP,PRINT
SOJGE U3,TAB32
SKIPN TABFLG
PUSHJ PDP,TERPRI
SOJGE U2,TAB31
SKIPE TABFLG
JRST TAB32A
PUSHJ PDP,TERPRI
MOVEI U1,[ASCIZ /Total /]
PUSHJ PDP,PRINT
MOVE U1,SGTOT
PUSHJ PDP,NUMOUT
MOVEI U1,[ASCIZ /
Term averages
/]
PUSHJ PDP,PRINT
TAB32A: SETZM SGTOT
MOVEI U2,↑D14
TAB33: MOVE U1,SGT5(U2)
IDIVI U1,↑D15
PUSHJ PDP,NUM4
SETZM SGT5(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB33
PUSHJ PDP,TERPRI
MOVEI U2,↑D14
TAB34: MOVE U1,SGT5C(U2)
IDIVI U1,↑D15
PUSHJ PDP,NUM4
SETZM SGT5C(U2)
MOVEI U1,[ASCIZ / /]
PUSHJ PDP,PRINT
SOJGE U2,TAB34
PUSHJ PDP,TERPRI
MOVEI X1,14 ;A FF
SKIPN TABFLG
PUSHJ PDP,TYO
SOJGE U5,TAB2 ;Now for the next phase
POPJ PDP,
;LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES
LEGM: SETZM FLAG
MOVEI X4,17
SETZM MOVES(X4) ;CLEAR SPACE
SOJGE X4,.-1
SETZ X4,
MOVEI U3,4
SKIPE U2,PLRF
PUSHJ PDP,LEGM1
MOVEI U3,5
SKIPE U2,PLLF
PUSHJ PDP,LEGM1
MOVNI U3,4
SKIPE U2,PLLB
PUSHJ PDP,LEGM1
MOVNI U3,5
SKIPE U2,PLRB
PUSHJ PDP,LEGM1
PUSHJ PDP,TERPRI
POPJ PDP,
LEGM1: MOVEI U4,↑D35
TRNE U2,1
JRST .+4
LSH U2,-1
SOJG U4,.-3
POPJ PDP,
MOVEI U1,[ASCIZ /,/]
SKIPE FLAG
PUSHJ PDP,PRINT
MOVE U1,U4
PUSHJ PDP,INOUT
HRLZM U5,MOVES(X4)
MOVEI U1,[ASCIZ /-/]
PUSHJ PDP,PRINT
MOVE U1,U4
ADD U1,U3
SKIPE OJ
ADD U1,U3
PUSHJ PDP,INOUT
HRRM U5,MOVES(X4)
AOS FLAG
AOS X4
JRST LEGM1+3
INOUT: CAIL U1,↑D27
SOS U1
CAIL U1,↑D18
SOS U1
CAIL U1,↑D9
SOS U1
MOVEM U1,U5
PUSHJ PDP,NUMOUT
POPJ PDP,
EXBITS: LSHC X5,-11 ;EXTRACT GUARD BITS
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,-1
LSH X5,-10
LSHC X5,3
POPJ PDP,
FIXIN: MOVE X1,X1S
PUSHJ PDP,INS4C ;MUST INSERT LINE
SKIPE BOOKM+1 ;IS THERE ANOTHER MOVE
JRST FIX13
PUSHJ PDP,DMPFIL
PUSHJ PDP,TERPRI
POPJ PDP,
FIX9K: MOVEI U1,[ASCIZ /[CR FOR DRAW OR TYPE WIN-LOSS DISTANCE /]
PUSHJ PDP,PRINT
TTYUUO 11,0
SETZM LASCAR
PUSHJ PDP,SCAN
CAIN U1,12
JRST .-2
CAIE U1,15
HRLM U1,BOOKM
JRST FIX11
NULL: MOVEI U1,[ASCIZ /0-0 STORES A NO-MOVE BOARD. DO YOU WANT THIS. Y OR N: /]
PUSHJ PDP,PRINT
PUSHJ PDP,NOYES
JRST FIX6 ;TRY AGAIN
JRST FIX11 ;STORE NO-MOVE BOARD
OA: Z
OP: Z
OK: Z
MOVES: BLOCK 20 ;SPACE FOR LEGAL MOVES
END